gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:16:43 29 4
gpt4 key购买 nike

我目前正在调试一个在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com