gpt4 book ai didi

iphone - 如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?

转载 作者:技术小花猫 更新时间:2023-10-29 10:06:26 26 4
gpt4 key购买 nike

如果我有一个自定义对象的 NSMutableArray,我怎样才能轻松清除数组而不引起任何内存问题?假设自定义对象类中有一个 dealloc 方法,它正确地释放了一个实例变量等。

例如,可以使用 NSArray 的“removeAllObjects”方法吗?

  • 如果是 - 这是如何工作的 - “removeAllObjects”在删除每个对象时是否调用每个对象的“dealloc”方法

  • 如果否 - 最简单的使用方法是什么?

编辑(4 次回复后) - 最后一个澄清问题是在回复很好之后 - 我仍然不太确定自定义对象中我已设置为保留的实例变量/属性?这些似乎只能通过我的自定义对象类中的“dealloc”方法释放,我们在其中手动执行此操作以及 [super release]。

因此,如果重新清除数组,如果我执行 removeAllObjects,然后 NSArray 向我的自定义对象发出“释放”,但不调用“dealloc”,那么我的实例变量如何被释放?

最佳答案

removeAllObjects 将从数组中删除对象。此过程将向对象发送释放消息,这将减少其引用计数。当引用计数达到零时,对象将被释放。

不要这样做,因为它会泄漏。

NSObject *object = [[NSObject alloc] init];       + 1
[array addObject:object]; + 1
[array removeAllObjects]; - 1
=======
= + 1 -> Leak

正确的做法是:

NSObject *object = [[[NSObject alloc] init] autorelease]; + 1 (from alloc) - 1 (from autorelease)
[array addObject:object]; + 1
[array removeAllObjects]; - 1
=======
= 0 -> Object will be deallocated

您可以不调用 removeAllObjects 而只是释放数组。如果一个数组被释放,它里面的所有东西都会被释放,如果没有其他对该对象的引用,它就会被释放。

关于iphone - 如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596648/

26 4 0
文章推荐: jquery - 性能:纯 CSS 与 jQuery
文章推荐: css - 使用webpack加载的css时如何停止FOUC
文章推荐: css - 在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com