Beide Methoden geben gleiche Ergebnisse zurück. Natürlich vergleicht -[NSObject isEqual:]
nicht die Zeiger von Objekten, es überprüft irgendwie die inneren Felder oder was auch immer. Also, was ist der Sinn der Verwendung genau -[NSNumber isEqualToNumber:]
, um zwei NSNumber
s zu vergleichen?- [NSObject isEqual:] und - [NSNumber isEqualToNumber:]: Was ist der Unterschied?
Antwort
Vom docs:
Zwei NSNumber Objekte werden als gleich, wenn sie die gleichen Werte haben ID oder wenn sie äquivalente Werte haben (wie durch den bestimmt vergleichen: Methode). Diese Methode ist effizienter als vergleichen: Wenn Sie wissen, die zwei Objekte sind Zahlen.
So behandelt es id equals und Zahlenvergleich.
Was bedeuten sie nach "äquivalenten Werten"? '@ 1' und' @ 1.0' sind natürlich äquivalent, aber gibt es ein Beispiel für Werte, wenn 'isEqualToNumber' selbst * verwendet * werden muss? Schauen Sie sich meine Tests auch für '@ 1' und' @ 1.0000000001' an (die sogar die gleichen Hashes und die verschiedenen Zeiger haben) 'isEqual' und' isEqualToNumber' haben die gleichen Ergebnisse. – efpies
Wenn der Vergleich: NSOrderedSame zurückgibt, sind sie äquivalente Werte. Ich würde vermuten, dass isEqualToNumber gleich Delegaten ist, wenn sie nicht die gleichen Objekte sind und sie beide NSNumbers sind. –
@TerryWilcox Sie haben Recht. Siehe Zeile 416 von [NSNumber.m] (https://code.google.com/p/cocotron/source/browse/Foundation/NSNumber/NSNumber.m). –
-[NSObject isEqual:]
überprüft, ob die beiden Objekte haben die Zeigeradresse und Hash während -[NSNumber isEqualToNumber:]
überprüft, ob die Werte gleich sind.
NSNumber
s, die gleichen Werte haben die gleiche Zeigeradresse sind.
Also erwarte ich, dass '@ 1' und' @ 1.0' gleiche Hashes haben. Nein? Aber eigentlich tun sie es. – efpies
NSNumber behält den Typ nicht bei. NSNumber von 0 bis 12 werden zwischengespeichert, also sind sie wahrscheinlich beide das gleiche Objekt. –
Die Standardimplementierung von isEqual: vergleicht die beiden Objekte ids, nicht Hashes. Zwei ungleiche Objekte können den gleichen Hash haben. –
Sie sind im Wesentlichen identisch, obwohl isEqual eine Typüberprüfung für die Klasse des übergebenen Objekts durchführen muss. IsEqualToNumber gibt die Überprüfung zur Kompilierzeit ein, die, wenn möglich, besser ist.
- 1. Convert NSObject in NSNumber
- 2. NSNumber primitive Wert Gleichheit vs isEqualToNumber mit Obj-C Literalen
- 3. Unterschied zwischen Objekt und NSObject
- 4. Was ist der Unterschied zwischen 5 und [5] in MATLAB?
- 5. Was ist der Unterschied zwischen `==` und `ist`?
- 6. NSString: isEqual vs. isEqualToString
- 7. Gibt es einen Unterschied zwischen NSString vergleichen: und isEqual (ToString) :?
- 8. Was ist ein DTO und BO? Was ist der Unterschied?
- 9. FirebaseUI und Firebase, was ist der Unterschied?
- 10. Was ist der Unterschied zwischen:.! und: r !?
- 11. Was ist der Unterschied zwischen Difftime und '-'?
- 12. Was ist der Unterschied zwischen $ und $$?
- 13. Was ist der Unterschied zwischen Verilog! und ~?
- 14. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 15. fgets() und fread() - Was ist der Unterschied?
- 16. Was ist der Unterschied zwischen/* ... */und/** ... */
- 17. Was ist der Unterschied zwischen `&` und `ref`?
- 18. Was ist der Unterschied zwischen $ (...) und `...`
- 19. Was ist der Unterschied zwischen .Equals und ==
- 20. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 21. Was ist der Unterschied zwischen + = und = +?
- 22. Was ist der Unterschied zwischen? und ? = Nil
- 23. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 24. Was ist der Unterschied beesesoup und bs4
- 25. Was ist der größte Wert, den eine NSNumber speichern kann?
- 26. Was ist der Unterschied zwischen:
- 27. Was ist der Unterschied zwischen der JSP und der JSTL?
- 28. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 29. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 30. Was ist der Unterschied zwischen x86 und x64 ist
'-isEqual:' prüft Objekt-Hashes (außer außer Kraft gesetzt). – CodaFi
@CodaFi Es scheint, dass es in 'NSNumber' überschrieben wird (weil zwei 'NSNumber's mit gleichen Hashes ungleich' isEqual' sind). Das ist die Frage. – efpies