我有一个环绕NSMutableSet对象的类,还有一个实例方法,它将对象(使用addObject:方法)添加到NSMutableSet中。
这很好,但我发现了性能上的问题,因为在方法中,在将对象添加到集合之前,我会显式地调用containsObject:。
三部分问题:
containsObject:?containsObject还是containsObjectIdenticalTo:?contains的掩护下调用什么addObject:方法呢?这对我来说很重要,因为如果我将一个对象传递给containsObject:,它将返回true,但是如果我将它传递给containsObjectIdenticalTo:,它将返回false。发布于 2010-10-18 06:20:24
如果您正在包装一个NSMutableSet,那么调用containsObject:是不必要的,因为集合(按定义不包含重复项)。因此,如果尝试插入已经在集合中的对象,则不会发生任何事情。
就性能而言,不要担心它,除非你真的把它作为一个问题来衡量。如果可以的话,我会非常惊讶,因为一个集合(至少,一个集合的智能实现)有O(1)查找时间(平均情况)。我向您保证,NSSet和朋友都是智能实现。:)
根据我收集到的关于NSSet实现的内容,如果您使用containsObject:或addObject:,它将调用对象上的-hash作为将它们“分组”的方法。如果使用containsObjectIdenticalTo:,它仍然会使用-hash缩小搜索过程,然后(本质上)进行指针比较以找到相同的对象。
https://stackoverflow.com/questions/3956929
复制相似问题