0
- (void)removeObjectsInArray:(NSArray *)otherArray

从接收数组中删除另一个给定数组中的对象。此方法类似于 removeObject:,但允许您通过单个操作有效地删除大量对象。如果接收数组不包含 otherArray 中的对象,则该方法无效(尽管它确实会产生搜索内容的开销)。此方法假定 otherArray 中的所有元素都响应hash和 isEqual:。

我知道 removeObjectsinArray 需要 isEqual

为什么它也需要实现对象?

4

1 回答 1

3

NSObject 文档

如果两个对象相等,则它们必须具有相同的哈希值。如果您在子类中定义 isEqual: 并打算将该子类的实例放入集合中,那么最后一点尤其重要。确保您还在子类中定义哈希。

如果您覆盖-isEqual:,建议也覆盖-hash。所以这是第一个原因 - 他们不在文档中提出相同的建议是不一致的-removeObjectsInArray:

第二个原因更微妙。作为经验丰富的开发人员,您可以假设-hash不会用于实现-removeObjectsInArray:(或通过实验发现),并且您可以不在对象上实现它而侥幸逃脱。但是,Apple 明确表示,如果他们认为值得优化,他们保留在实施中使用的权利,并且您应该实施它以防万一。-hash

(我不知道他们是否在当前的实现中使用它)

于 2012-09-22T14:49:58.117 回答