如何创建一个NSMutableArray对象,这些对象不会增加添加到其中的每个对象的保留计数?

时间:2015-11-05 17:15:28

标签: ios objective-c arrays

所以在下面的例子中,是否可以以某种方式强制转换参数,使其变弱或者什么?

-(void)addObject:(NSObject *)object {
    [self.collection addObject:object];
}

通过这样做,你肯定需要检查你拉出'self.collection'的每个对象,检查它是否是一个悬空指针,对吗?

1 个答案:

答案 0 :(得分:3)

我不知道你问题的答案是什么,但是有一个类别调用NSHashTable可以对其成员进行弱引用。 你应该看看它。您可以使用选项初始化它:

NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSHashTableWeakMemory];

其他选项包括:

  • NSHashTableStrongMemory
  • NSHashTableCopyIn
  • NSHashTableObjectPointerPersonality

你使用它的方式与NSArray非常相似,但它是NSSet的通用模拟,所以如果你想存储非唯一对象,它可能对你不好:

[hashTable addObject:@"myObj1"];
[hashTable addObject:@"myObj2"];
[hashTable removeObject:@"myObj2"];

我认为你不能用NSArray阻止弱引用,但另一种选择是将对象包装在值中并存储值:

NSValue *val = [NSValue valueWithNonretainedObject:@"myObj1"];
[array addObject:val];