Entrambi i metodi restituiscono risultati uguali. Naturalmente, -[NSObject isEqual:]
non confronta i puntatori degli oggetti, ma controlla in qualche modo i campi interni o qualsiasi altra cosa. Quindi, qual è il punto di utilizzare esattamente -[NSNumber isEqualToNumber:]
per confrontare due NSNumber
s?- [NSObject isEqual:] e - [NSNumber isEqualToNumber:]: qual è la differenza?
risposta
Dal docs:
Due oggetti NSNumber sono considerati uguali se hanno lo stesso ID valori o se hanno valori equivalenti (come determinato dal paragonare: metodo). Questo metodo è più efficiente del confronto: se si conoscono i due oggetti sono numeri.
Quindi gestisce gli equivoci e il confronto dei numeri.
Cosa significano dopo "valori equivalenti"? '@ 1' e' @ 1.0' sono ovviamente equivalenti, ma esiste un esempio di valori quando 'isEqualToNumber' stesso * deve * essere usato? Guarda i miei test anche per '@ 1' e' @ 1.0000000001' (che hanno anche gli stessi hash e i diversi puntatori) 'isEqual' e' isEqualToNumber' hanno gli stessi risultati. – efpies
Se il confronto: restituisce NSOrderedSame, sono valori equivalenti. Indoverei che isEqual è delegato a isEqualToNumber se non sono gli stessi oggetti e sono entrambi NSNumbers. –
@TerryWilcox Hai ragione. Vedere la riga 416 di [NSNumber.m] (https://code.google.com/p/cocotron/source/browse/Foundation/NSNumber/NSNumber.m). –
-[NSObject isEqual:]
controlla se i due oggetti hanno l'indirizzo del puntatore e l'hash mentre -[NSNumber isEqualToNumber:]
controlla se i valori sono gli stessi.
NSNumber
s che sono uguali hanno lo stesso indirizzo puntatore.
Quindi mi aspetto che '@ 1' e' @ 1.0' abbiano gli stessi hash. No? Ma in realtà lo fanno. – efpies
NSNumber non conserva il tipo. NSNumber da 0 a 12 sono memorizzati nella cache, quindi entrambi sono probabilmente lo stesso oggetto. –
L'implementazione predefinita di isEqual: confronta i due oggetti id, non gli hash. Due oggetti non uguali possono avere lo stesso hash. –
Sono essenzialmente identici, sebbene isEqual debba eseguire un controllo di tipo sulla classe dell'oggetto passato. IsEqualToNumber esegue il controllo di tipo in fase di compilazione, che è preferibile quando possibile.
- 1. Qual è la differenza tra NSNumber e NSInteger?
- 2. Che cos'è NSObject isEqual: e funzione di hash predefinita?
- 3. Differenza tra oggetto e NSObject
- 4. Qual è la differenza tra NSObject e AnyObject? Quando usare i due?
- 5. NSString: isEqual vs. isEqualToString
- 6. C'è una differenza tra NSString compare: e isEqual (ToString) :?
- 7. Qual è la differenza tra = e: =
- 8. Qual è la differenza tra Verilog! e ~?
- 9. Qual è la differenza tra? : e ||
- 10. qual è la differenza tra [[], []] e [[]] * 2
- 11. SWT e AWT, qual è la differenza?
- 12. Qual è la differenza tra $ e $$?
- 13. Qual è la differenza tra ("") e (null)
- 14. TraceSwitch e SourceSwitch: qual è la differenza?
- 15. Qual è la differenza tra dict() e {}?
- 16. Qual è la differenza tra " " e ""?
- 17. Qual è la differenza tra {0} e ""?
- 18. Qual è la differenza tra `##` e `hashCode`?
- 19. Qual è la differenza tra {0} e +?
- 20. Qual è la differenza tra .ToString() e + ""
- 21. qual è la differenza tra:.! e: r !?
- 22. fgets() e fread() - Qual è la differenza?
- 23. Qual è la differenza tra "è Nessuno" e "== Nessuno"
- 24. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 25. Qual è la differenza tra il callback e la promessa
- 26. Qual è la differenza tra la sezione .got e .got.plt?
- 27. Qual è la differenza tra la lista() e []
- 28. Qual è la differenza tra GHC e la piattaforma Haskell?
- 29. Qual è la differenza tra sé e la finestra?
- 30. Qual è la differenza tra la cartella vim72 e vimfiles?
'-isEqual:' controlla gli hash degli oggetti (a meno che non sia sovrascritto). – CodaFi
@CodaFi Sembra che in 'NSNumber' sia sovrascritto (perché due' NSNumber's con uguali hash non sono uguali per 'isEqual'). Questa è la domanda. – efpies