我目前正在调试一个在 Instrument 中使用 ARC 的应用程序。似乎如果 Object A
包含一个包含 Object B
的数组,我需要在实例变量 上显式调用
,这是一个 removeAllObjects
方法contentsNSArray
。
- (void)dealloc {
NSLog(@"%@ deallocing", self);
[_contents removeAllObjects];
}
如果我要注释掉 [_contents removeAllObjects]
行,Instruments 会显示包含在数组中的对象在父对象被释放后仍然存在。我认为当 NSArray
解除分配时,它会自动减少其中包含的元素的保留计数。那么为什么需要显式删除呢?这种行为是调试本身的副作用吗?
最佳答案
通常:
- 如果一个对象被释放,它的所有 ivar 都被释放。
- 如果数组被释放,数组中所有对象的保留计数都会减少。
如果我不得不猜测,您正在某处的 block 中使用数组中的对象。对于 ARC, block 是内存泄漏的主要来源。
您在哪里或如何使用数组和数组中的对象?
关于objective-c - 在 ARC 下解除分配时是否需要在 NSArray 上调用 removeAllObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974660/