Cả hai phương thức đều trả về kết quả bằng nhau. Tất nhiên, -[NSObject isEqual:]
không so sánh các con trỏ của các đối tượng, bằng cách nào đó kiểm tra các lĩnh vực bên trong hoặc bất cứ điều gì. Vì vậy, điểm của việc sử dụng chính xác -[NSNumber isEqualToNumber:]
để so sánh hai NSNumber
là gì?- [NSObject isEqual:] và - [NSNumber isEqualToNumber:]: sự khác biệt là gì?
Trả lời
Từ docs:
Hai đối tượng NSNumber được coi là bằng nhau nếu chúng có cùng id giá trị hoặc nếu họ có giá trị tương đương (được xác định bởi so sánh: Phương pháp). Phương pháp này hiệu quả hơn so sánh: nếu bạn biết hai đối tượng là số.
Vì vậy, nó xử lý id bằng và so sánh số.
Ý nghĩa của chúng sau "giá trị tương đương" là gì? '@ 1' và' @ 1.0' tương đương với khóa học, nhưng có một ví dụ về các giá trị khi 'isEqualToNumber' chính nó * phải * được sử dụng không? Hãy xem xét các bài kiểm tra của tôi ngay cả đối với '@ 1' và' @ 1.0000000001' (thậm chí có băm bằng nhau và các con trỏ khác nhau) 'isEqual' và' isEqualToNumber' có kết quả bằng nhau. – efpies
Nếu so sánh: trả về NSOrderedSame, chúng là các giá trị tương đương. Tôi sẽ đoán rằng isEqual đại biểu để isEqualToNumber nếu họ không phải là cùng một đối tượng và cả hai đều NSNumbers. –
@TerryWilcox Bạn nói đúng. Xem dòng 416 của [NSNumber.m] (https://code.google.com/p/cocotron/source/browse/Foundation/NSNumber/NSNumber.m). –
-[NSObject isEqual:]
kiểm tra xem hai đối tượng có địa chỉ con trỏ và băm trong khi -[NSNumber isEqualToNumber:]
kiểm tra xem các giá trị có giống nhau hay không.
NSNumber
s có giá trị bằng nhau có cùng địa chỉ con trỏ.
Vì vậy, tôi hy vọng rằng '@ 1' và' @ 1.0' sẽ có băm bằng nhau. Không? Nhưng thực tế họ làm. – efpies
NSNumber không bảo toàn loại. NSNumber từ 0 đến 12 được lưu trong bộ nhớ cache, vì vậy cả hai đều có thể là cùng một đối tượng. –
Việc thực hiện mặc định của isEqual: so sánh hai id đối tượng, không phải hash. Hai đối tượng không bằng nhau có thể có cùng một giá trị băm. –
Về cơ bản chúng giống hệt nhau, mặc dù isEqual phải thực hiện kiểm tra kiểu trên lớp của đối tượng được truyền vào. IsEqualToNumber thực hiện kiểm tra kiểu tại thời gian biên dịch, tốt hơn khi có thể.
- 1. NSObject isEqual: và hàm băm mặc định là gì?
- 2. Sự khác biệt giữa đối tượng và NSObject
- 3. DTO và BO là gì? Sự khác biệt là gì?
- 4. Sự khác biệt giữa JavaBean và POJO là gì?
- 5. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 6. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 7. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 8. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 9. Sự khác biệt giữa DBI và DBD là gì?
- 10. Sự khác biệt giữa NSInvocation và chặn là gì?
- 11. Sự khác biệt giữa fn và fn * là gì?
- 12. Sự khác biệt giữa xtype và bí danh là gì?
- 13. Sự khác biệt giữa build.sbt và build.scala là gì?
- 14. Sự khác biệt giữa localname và qname là gì?
- 15. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 16. Sự khác biệt giữa while (true) và loop là gì?
- 17. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 18. Sự khác biệt giữa uint và System.UInt32 là gì?
- 19. Sự khác biệt giữa heuristic và thuật toán là gì?
- 20. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 21. Sự khác biệt giữa \ r và \ n là gì?
- 22. Sự khác biệt giữa phần .got và .got.plt là gì?
- 23. Sự khác biệt giữa ascx và .cshtml là gì?
- 24. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 25. Sự khác biệt giữa Thông báo và pynotify là gì?
- 26. Sự khác biệt giữa to_a và to_ary là gì?
- 27. sự khác biệt giữa callback là gì và hứa
- 28. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 29. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 30. Sự khác biệt giữa isset và empty là gì?
'-isEqual:' kiểm tra băm đối tượng (trừ khi bị ghi đè). – CodaFi
@CodaFi Có vẻ như trong 'NSNumber' nó bị ghi đè (vì hai' NSNumber' có băm bằng nhau không bằng nhau cho 'isEqual'). Đó là câu hỏi. – efpies