Apple 的文档目前没有记录 NSSet 的“身份”概念。
我有一些错误似乎来自 Apple 的代码。例如,“[NSMutableSet minusSet]”从来没有像记录的那样对我有用——但我很确定这是因为“身份”。
containsObject:
Returns a Boolean value that indicates whether a given object is present in the set.
YES if anObject is present in the set, otherwise NO.
这是什么意思?
仅供引用我尝试过的事情:
- 在集合中的所有类上实现了“isEqual:”
- 检查所有类都是同一个类(没有子类/父类(super class)混淆)
- 对集合中的所有类实现 NSCopying(无效)
最佳答案
在 Cocoa 中,对象相等是通过使用 isEqual:
和 hash:
来自 isEqual:
的注释:
If two objects are equal, they must have the same hash value. This last point is particularly important if you define isEqual: in a subclass and intend to put instances of that subclass into a collection. Make sure you also define hash in your subclass.
您的子类将需要实现这两个,以便它们返回相同的东西。一旦他们这样做,他们就可以在 Cocoa Collections 中正确使用。
NSSet
相等性不起作用的原因是因为集合使用哈希(它存储为哈希表),因此如果您只实现了 isEqual:
,那么他们的哈希值有可能(很有可能)不同。
关于objective-c - Apple 是如何实现 NSSet 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271160/