[NSArray containsObject] 使用 isEqual。isEqual 默认为地址。
假设我想知道 [NSArray containsObject] 是否基于参考?所以我想知道那个实际的对象,而不是一个与其相等的对象,是否在数组中。
我想用它来比较核心数据对象。核心数据对象可能会被删除和取消引用,我想知道所有包含引用它的元素的数组会发生什么。
[NSArray containsObject] 使用 isEqual。isEqual 默认为地址。
假设我想知道 [NSArray containsObject] 是否基于参考?所以我想知道那个实际的对象,而不是一个与其相等的对象,是否在数组中。
我想用它来比较核心数据对象。核心数据对象可能会被删除和取消引用,我想知道所有包含引用它的元素的数组会发生什么。
isEqual 默认为地址
在那种情况下,有问题吗?
听起来您想将对象存储在isEqual
不使用地址的位置,但仍使用该地址进行此检查,对吗?
没有-[containsObjectIdenticalTo:]
,但有一个-[indexOfObjectIdenticalTo:]
;如果返回除了 NSNotFound 之外的任何内容,则包含它。
if ([anArray indexOfObjectIdenticalTo:anObject] != NSNotFound) {
}
正如NSArray 参考文档明确指出的那样:
如果对象地址相同,则认为对象相同。
有一整套Identical
方法NSArray
和其他集合,正是为了这个目的。