4

我有一个包装NSMutableSet对象的类,我有一个实例方法,可以将对象(使用该addObject:方法)添加到NSMutableSet.

这很好用,但我闻到了性能问题,因为在containsObject:将对象添加到集合之前我明确调用的方法内部。

三部分问题:

  1. containsObject:在将对象添加到集合之前是否需要调用?
  2. 如果是这样,那么我应该使用什么实际方法,containsObject或者containsObjectIdenticalTo:
  3. 如果不是这样,什么contains方法会被调用addObject:?这对我很重要,因为如果我将一个对象传递给containsObject:它会返回 true,但如果我将它传递给containsObjectIdenticalTo:它会返回 false。
4

1 回答 1

8

如果你包装一个NSMutableSet,那么调用containsObject:是不必要的,因为一个集合(根据定义)不包含重复项。因此,如果您尝试插入已经在集合中的对象,则不会发生任何事情。

就性能影响而言,除非您真正衡量它是一个问题,否则不要担心它。如果你可以的话,我会非常非常非常惊讶,因为一个集合(至少,一个集合的智能实现)具有 O(1) 查找时间(平均情况)。我向你保证,NSSet朋友们都是聪明的实现。:)

从我收集到NSSet-hash关于. 如果您使用,它仍将用于缩小搜索过程,然后(基本上)进行指针比较以找到相同的对象。containsObject:addObject:containsObjectIdenticalTo:-hash

于 2010-10-18T06:20:24.340 回答