nsmutableset addobject
-
08-10-2019 - |
题
我有一堂课围绕着 NSMutableSet
对象,我有一个添加对象的实例方法(使用 addObject:
方法) NSMutableSet
.
这效果很好,但是我闻到了性能的味道,因为在我明确调用的方法中 containsObject:
在将对象添加到集合之前。
三部分问题:
- 我需要打电话吗
containsObject:
在我在集合中添加对象之前? - 如果是这样,那么我应该使用哪种实际方法,
containsObject
或者containsObjectIdenticalTo:
? - 如果不是这样,什么
contains
方法在引擎盖下被调用addObject:
?这对我很重要,因为如果我将一个对象转到containsObject:
它会返回真实,但是如果我将其传递给containsObjectIdenticalTo:
它将返回false。
解决方案
如果您要包装 NSMutableSet
, ,然后调用 containsObject:
是不必要的,因为根据定义)不包含重复项。因此,如果您尝试插入已经存在的对象,则不会发生任何事情。
就性能打击而言,除非您实际衡量它是一个问题,否则不要担心。如果您可以的话,我会非常非常惊讶,因为一组(至少是一组明智的实现)具有O(1)查找时间(平均情况)。我保证你 NSSet
朋友是明智的实现。 :)
从我收集到的关于实施 NSSet
, ,它是在调用 -hash
如果您使用 containsObject:
或者 addObject:
. 。如果您使用 containsObjectIdenticalTo:
, ,它仍然会使用 -hash
缩小搜索过程,然后(本质上)进行指针比较以找到相同的对象。
不隶属于 StackOverflow