3

我正在调试一个在 Instrument 中使用 ARC 的应用程序。似乎如果Object A包含一个包含Object Bs 的数组,我需要removeAllObjects在实例变量上显式调用方法contents,这是一个NSArray.

- (void)dealloc {
    NSLog(@"%@ deallocing", self);
   [_contents removeAllObjects];
}

如果我要注释掉这一行[_contents removeAllObjects],仪器会显示数组中包含的对象在父对象被释放后仍然存在。我认为当NSArray释放它时,它会自动减少其中包含的元素的保留计数。那么为什么需要显式删除呢?这种行为是调试本身的副作用吗?

4

1 回答 1

3

一般:

  • 如果一个对象被释放,它的所有 ivars 都被释放。
  • 如果一个数组被释放,数组中的所有对象的保留计数都会减少。

如果我不得不猜测,您正在某个块中的某个块中使用数组中的对象。对于 ARC,块是内存泄漏的主要来源。

您在哪里或如何使用数组和数组中的对象?

于 2012-10-19T13:42:22.577 回答