所以在下面的例子中,是否可以以某种方式强制转换参数,使其变弱或者什么?
-(void)addObject:(NSObject *)object {
[self.collection addObject:object];
}
通过这样做,你肯定需要检查你拉出'self.collection'的每个对象,检查它是否是一个悬空指针,对吗?
答案 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];