- (void)removeObjectsInArray:(NSArray *)otherArray
从接收数组中移除另一个给定数组中的对象。 此方法类似于removeObject:,但允许您高效 只需一次操作即可删除大量对象。如果收到 array不包含otherArray中的对象,该方法无效 (虽然它确实会产生搜索内容的开销)。这个 方法假定otherArray中的所有元素都响应哈希和 isEqual:方法
我理解removeObjectsinArray需要isEqual
为什么还需要实现对象?
答案 0 :(得分:3)
如果两个对象相等,则它们必须具有相同的哈希值。这个 如果你定义isEqual:在a中,最后一点尤为重要 子类并打算将该子类的实例放入 采集。确保您还在子类中定义哈希。
如果您覆盖-isEqual:
,建议您也覆盖-hash
。所以这是第一个原因 - 如果他们不在-removeObjectsInArray:
文档中提出相同的建议,那将是不一致的。
第二个原因更微妙。作为一名经验丰富的开发人员,您可以假设-hash
不会用于-removeObjectsInArray:
的实现(或通过实验找到它),并且您可以逃避不在您的对象上实现它。但是,Apple明确表示他们保留正确的以在其实施中使用-hash
,如果他们认为值得进行优化,并且您应该实施它以防万一。
(我不知道他们是否在当前的实施中使用它)