<分区>
标签 ios objective-c arrays
<分区>
所以在下面的例子中,是否可以以某种方式转换参数,使其变弱或其他什么?
-(void)addObject:(NSObject *)object {
[self.collection addObject:object];
}
通过这样做,您肯定需要检查从“self.collection”中拉取的每个对象,以检查它是否是悬空指针,对吗?
最佳答案
我不知道你的问题的答案是什么,但是有一个类调用 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];
关于ios - 你如何创建一个对象的 NSMutableArray,它不会增加添加到它的每个对象的保留计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33550779/