【发布时间】:2012-10-10 02:12:54
【问题描述】:
我目前正在调试一个在 Instrument 中使用 ARC 的应用程序。似乎如果Object A 包含一个包含Object Bs 的数组,我需要在实例变量contents 上显式调用removeAllObjects 方法,这是一个NSArray。
- (void)dealloc {
NSLog(@"%@ deallocing", self);
[_contents removeAllObjects];
}
如果我要注释掉[_contents removeAllObjects] 行,仪器显示包含在数组中的对象在父对象被释放后仍然存在。我认为当NSArray 解除分配时,它会自动减少其中包含的元素的保留计数。那么为什么需要显式删除呢?这种行为是调试本身的副作用吗?
【问题讨论】:
-
嗯。即使在
A的实例被dealloced 之后,该数组似乎更有可能仍然存在。您确定吗,A的实例持有的引用是您的应用程序中对数组的唯一引用。那个时候? -
其实我想我想通了。无论出于何种原因,我都需要在对象释放之前将应用程序的焦点切换到前台(打印 NSLog 消息)。以前的焦点总是在 XCode 和控制台上。看起来像从数组中显式删除内容改变了释放的时间。
标签: objective-c memory-leaks automatic-ref-counting instruments