我有一个环绕 NSMutableSet
对象的类,我有一个实例方法将对象(使用 addObject:
方法)添加到 NSMutableSet
。
这很好用,但我闻到了性能问题,因为在方法中我在将对象添加到集合之前显式调用了 containsObject:
。
三部分问题:
- 在将对象添加到集合之前是否需要调用
containsObject:
? - 如果是这样,那么我应该使用什么实际方法,
containsObject
或containsObjectIdenticalTo:
? - 如果不是这样,在
addObject:
的幕后会调用什么contains
方法?这对我很重要,因为如果我将一个对象传递给containsObject:
,它会返回 true,但如果我将它传递给containsObjectIdenticalTo:
,它会返回 false。
最佳答案
如果您要包装一个 NSMutableSet
,则不需要调用 containsObject:
,因为一个集合 (by definition) 不包含重复项。因此,如果您尝试插入一个已经在集合中的对象,则不会发生任何事情。
就性能影响而言,不要担心,除非您实际衡量它是一个问题。如果你能做到,我会非常非常非常惊讶,因为一个集合(至少,一个集合的智能实现)具有 O(1) 查找时间(平均情况)。我向你保证 NSSet
和它的 friend 们是聪明的实现。 :)
根据我收集到的关于 NSSet
实现的信息,如果您使用 containsObject:
或 addObject:
。如果您使用 containsObjectIdenticalTo:
,它仍会使用 -hash
来缩小搜索过程,然后(实质上)进行指针比较以找到相同的对象。
关于objective-c - NSMutableSet 添加对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956929/