Objective c -[NSObject isEqual:]和-[NSNumber IsequalNumber:]:什么';有什么区别?
两种方法返回相同的结果。当然,Objective c -[NSObject isEqual:]和-[NSNumber IsequalNumber:]:什么';有什么区别?,objective-c,Objective C,两种方法返回相同的结果。当然,-[NSObject isEqual:不会比较对象的指针,它会以某种方式检查内部字段或其他内容。那么,使用-[NSNumber isequaltoname:][/code>来比较两个NSNumbers有什么意义呢?-[NSObject isEqual:][/code>检查这两个对象是否有指针地址和散列,而-[NSNumber isequaltoname:][/code>检查值是否相同 NSNumbers值相等的指针地址相同。来自: 如果两个NSNumber对象具有相
-[NSObject isEqual:
不会比较对象的指针,它会以某种方式检查内部字段或其他内容。那么,使用-[NSNumber isequaltoname:][/code>来比较两个NSNumber
s有什么意义呢?-[NSObject isEqual:][/code>检查这两个对象是否有指针地址和散列,而-[NSNumber isequaltoname:][/code>检查值是否相同
NSNumber
s值相等的指针地址相同。来自:
如果两个NSNumber对象具有相同的id,则认为它们相等
值或是否具有等效值(由
比较:方法)。
这种方法比比较更有效:如果你知道这两种方法
对象是数字
因此,它处理id相等和数字比较。它们基本相同,尽管isEqual必须对传入的对象的类进行类型检查。isEqualToNumber在编译时进行类型检查,这在可能的情况下会更好 所以我希望@1
和@1.0
的散列数相等。不但事实上,它们是这样的。NSNumber不保留类型。NSNumber从0到12被缓存,因此它们可能都是相同的对象。两个不相等的对象可以有相同的哈希。@FigBug在这种情况下,id
是什么?对不起,应该更清楚一些。[NSObject isEqual:]比较指针。子类可以实现isEqual:它通常测试被比较的两个对象是否属于同一类型,然后调用isEqualToFoo:。isEqualToFoo:假设它们是同一类型的,因此省略了一些测试,这就是为什么它通常比调用isEqual更快的原因:。它们在“等价值”之后是什么意思@1
和@1.0
当然是等效的,但是当必须使用isEqualToNumber
本身时,是否有一个值示例?看看我的测试,即使是@1
和@1.0000000001
(它们甚至有相等的散列和不同的指针)isEqual
和isEqualToNumber
也有相同的结果。如果compare:返回OrderedName,它们是相等的值。如果isEqual委托给isEqualToNumber的对象不是同一个对象,并且它们都是NSNumber,那么我猜它们是isEqual委托给isEqualToNumber的。@TerryWilcox你是对的。请参见。-isEqual:
检查对象哈希(除非被重写)。@CodaFi似乎在NSNumber
中被重写(因为两个哈希相等的NSNumber
对于isEqual
),并不相等)。这就是问题所在。