NSMutableSet addObject

时间:2010-10-18 06:14:18

标签: objective-c foundation

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

这很好用,但我正在嗅到性能障碍,因为在将对象添加到集合之前,我明确地调用了containsObject:

三部分问题:

  1. 在向对象添加对象之前,是否需要调用containsObject:
  2. 如果是,那么我应该使用哪种实际方法containsObjectcontainsObjectIdenticalTo:
  3. 如果不是这样,那么在contains的引擎下调用addObject:方法是什么?这对我很重要,因为如果我将一个对象传递给containsObject:,它将返回true,但是如果我将它传递给containsObjectIdenticalTo:,它将返回false。

1 个答案:

答案 0 :(得分:8)

如果要包装NSMutableSet,则不需要调用containsObject:,因为集合(by definition)不包含重复项。因此,如果您尝试插入已在集合中的对象,则不会发生任何事情。

就性能影响而言,除非您实际测量它是一个问题,否则不要担心它。如果你能做到,我会非常非常惊讶,因为一组(至少是一组的智能实现)具有O(1)查找时间(平均情况)。我保证NSSet和朋友是聪明的实施。 :)

根据我收集的有关NSSet的实现情况,它会在对象上调用-hash,以便在使用containsObject:或{{addObject:时将其“分组”到容器中1}}。如果您使用containsObjectIdenticalTo:,它仍将使用-hash缩小搜索过程范围,然后(基本上)执行指针比较以查找相同的对象。