Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c -[NSObject isEqual:]和-[NSNumber IsequalNumber:]:什么';有什么区别?_Objective C - Fatal编程技术网

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
),并不相等)。这就是问题所在。