我有一堂课围绕着 NSMutableSet 对象,我有一个添加对象的实例方法(使用 addObject: 方法) NSMutableSet.

这效果很好,但是我闻到了性能的味道,因为在我明确调用的方法中 containsObject: 在将对象添加到集合之前。

三部分问题:

  1. 我需要打电话吗 containsObject: 在我在集合中添加对象之前?
  2. 如果是这样,那么我应该使用哪种实际方法, containsObject 或者 containsObjectIdenticalTo:?
  3. 如果不是这样,什么 contains 方法在引擎盖下被调用 addObject:?这对我很重要,因为如果我将一个对象转到 containsObject: 它会返回真实,但是如果我将其传递给 containsObjectIdenticalTo: 它将返回false。
有帮助吗?

解决方案

如果您要包装 NSMutableSet, ,然后调用 containsObject: 是不必要的,因为根据定义)不包含重复项。因此,如果您尝试插入已经存在的对象,则不会发生任何事情。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top