在ARC下解除分配时,是否需要在NSArray上调用removeAllObjects?

时间:2012-10-19 12:50:01

标签: objective-c memory-leaks automatic-ref-counting instruments

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

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

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

1 个答案:

答案 0 :(得分:3)

通常:

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

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

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