Tengo una clase de modelo de base de datos que es NSObject
. Tengo un conjunto de estos objetos en un NSMutableArray
. Yo uso indexOfObject:
para encontrar una coincidencia. El problema es que la dirección de memoria del objeto modelo cambia. De modo que anulo el método hash
para devolver la identificación de la fila del modelo. Sin embargo, esto no lo soluciona. También tengo que anular el método isEqual:
para comparar el valor del método hash
.¿Qué es la función predeterminada de NSObject isEqual: y hash?
¿Qué utiliza el método isEqual:
para determinar la igualdad de forma predeterminada?
Supongo que usa la dirección de memoria. Después de leer la documentación isEqual:
pensé que usaba el valor del método hash
. Obviamente, ese no es el caso, ya que mi intento de anular ese valor no resolvió mi problema inicial.
Aquí hay algunas respuestas especulativas. ¿Alguien puede proporcionar la documentación actual de que el valor predeterminado es que Equals usa la dirección? No estoy sugiriendo que no lo haga, solo me gustaría escucharlo de la boca del caballo. – DougW
@DougW Compartí tus sentimientos sobre esto, así que rastreé una referencia oficial y la edité en la respuesta aceptada. –
Está leyendo los documentos para el protocolo NSObject, no la clase NSObject. El protocolo define qué deben hacer los métodos, la clase no puede definir lo que realmente hace. Siempre es más seguro anular equals y hash para trabajar cómo quieres que funcionen. –