【发布时间】:2014-02-24 23:54:18
【问题描述】:
我有一个类,比如说Chicken,我想要一个类级别的方法来枚举所有当前存在的Chickens。为此,我保留了一个类级别的NSMutableArray 并在init 方法中将self 添加到此。
这很好,我的枚举方法只是返回一个指向这个数组的(非可变的)指针。
问题是我不能再通过删除所有指向它的指针来释放鸡,因为数组中总是有一个强指针。
例如如果我这样做......
Chicken *chick = [[Chicken alloc] init];
// Do something with the chick
chick = nil;
鸡之所以存在,是因为数组中有一个指向它的强指针。我可以有一个-[Chicken kill] 方法,将它从数组中删除,但这并不整洁。
解决这个问题最好的方法是什么?
【问题讨论】:
-
在数组中使用弱引用。 NSValue 支持非保留对象,但如果你想要一个自动归零引用,你可以使用这篇文章的后半部分:stackoverflow.com/questions/4224495/…
-
一旦考虑到多线程,这是一个很难维护的设计。小心。
标签: objective-c cocoa memory-management