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

标签 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 解除分配时,它会自动减少其中包含的元素的保留计数。那么为什么需要显式删除呢?这种行为是调试本身的副作用吗?

最佳答案

通常:

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

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

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

关于objective-c - 在 ARC 下解除分配时是否需要在 NSArray 上调用 removeAllObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974660/

相关文章:

ios - dispatch_semaphore_wait 阻塞了我的网络请求回调

iphone NSSearchPathForDirectoriesInDomains 内存泄漏?

objective-c - 如何创建测试以确保没有保留周期?

ios将项目转换为arc

iphone - VerificationController #warning 在这里处理错误

iphone - 很难理解toValue, byValue of CABasicAnimation, ios

Objective-c 序列化字典与 Node js 服务器

无法在 32 位 Linux 中耗尽物理内存

java - 无需重启服务器即可清理Tomcat内存

ios - 在 AppDelegate 中对初始 ViewController 使用强委托(delegate)