【发布时间】:2009-09-06 11:23:17
【问题描述】:
我想在 Objective C 中创建一个对象,但我没有对它的引用。
是否允许通过调用[self release]让对象控制自己的生命周期?
如果您想知道我为什么需要这个:我想创建一个订阅某些通知的对象,但过了一段时间该对象不再需要并且应该消失了。
那么,以下是否允许?
- (void) destroyMyself {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self release];
}
【问题讨论】:
-
我从未使用过 Cocoa,但从我在网络版本上随机阅读的内容中,我只是减少了运行时垃圾收集器用来知道何时收集对象的内部计数器,所以这可能是允许的,即使如果它看起来很奇怪。同样,我可能完全错了,因为这只是我从前段时间阅读的内容中做出的假设。
-
在引用计数环境中,没有垃圾收集器,所以当引用计数为零时,对象会立即被释放。 (在调用 [self release] 之后,对象实际上已经消失并被释放)
-
完全有效。这是“无效模式”的开始。您可能还应该做的是在-init 中将一些实例变量设置为YES,在-destroyMyself 中设置为NO。这样,您可以在其他方法中断言该标志为 YES;如果否,您知道您的对象在您明确打算不再有效之后被使用。
-
另一个你可能想用它的例子是一个对象,它包含一个 NSTimer 的实例和一个随机的无符号整数(你希望定时器触发的次数)。如果没有其他对象可以知道这个随机整数并声明这个包装的计时器,那么计时器对象可以使其计时器无效然后释放自己?
标签: iphone objective-c