Ho una classe modello di database che è un NSObject
. Ho un set di questi oggetti in un NSMutableArray
. Io uso indexOfObject:
per trovare una corrispondenza. Il problema è la modifica dell'indirizzo di memoria dell'oggetto modello. Quindi sto ignorando il metodo hash
per restituire l'ID della riga del modello. Questo tuttavia non lo aggiusta. Devo anche eseguire l'override del metodo isEqual:
per confrontare il valore del metodo hash
.Che cos'è NSObject isEqual: e funzione di hash predefinita?
Cosa utilizza il metodo isEqual:
per determinare l'uguaglianza per impostazione predefinita?
Suppongo che utilizzi l'indirizzo di memoria. Dopo aver letto la documentazione isEqual:
ho pensato di utilizzare il valore del metodo hash
. Ovviamente, questo non è il caso in quanto il mio tentativo di ignorare quel valore non ha risolto il mio problema iniziale.
Ci sono alcune risposte speculative qui. Qualcuno può fornire una documentazione vera e propria che il valore predefinito è Equals usa indirizzo> Non sto suggerendo che non lo fa, vorrei solo sentirlo dalla bocca del cavallo. – DougW
@DougW Ho condiviso i tuoi sentimenti su questo, quindi ho rintracciato un riferimento ufficiale e l'ho modificato nella risposta accettata. –
Stai leggendo i documenti per il protocollo NSObject, non la classe NSObject. Il protocollo definisce che cosa dovrebbero fare i metodi, la classe non riesce a definire cosa effettivamente fa. È sempre più sicuro scavalcare equals e hash per lavorare come vuoi che funzionino. –