内存泄漏与NSMutableArray

时间:2011-09-08 20:33:15

标签: cocoa nsmutablearray

我正在尝试设置多维NSMutableArray。我最初将所有位置设置为[NSNumber numberWithInt:0],然后将该对象替换为另一个[NSNumber numberWithInt:4](例如)。当我完成后,我想重建阵列。我说[array release]是对的吗?这会释放所有NSNumber个对象吗?或者我是否需要进行更多高级内存管理,例如将所有对象设置为nil?

3 个答案:

答案 0 :(得分:2)

您可以释放数组并重新创建它 - 或者稍微更有效 - 只需调用数组的-removeAllObjects即可。您填充它的NSNumber对象是自动释放的,因此数组在添加它们时通过取得它们的所有权,也承担了在它自身被释放或删除其内容时释放它们的责任。

答案 1 :(得分:2)

在添加/替换和删除对象时,以及释放包含项目的阵列时,阵列将正确保留并释放NSNumber。所以是的,你是正确的,因为你正在使用NSNumber方便构造函数,它将返回一个自动释放的对象。

答案 2 :(得分:1)

哲学上,你不应该知道或关心NSArray关于保留和释放的内容。与之契约的程度是addObject: / etc会将一个对象放入数组中,objectAtIndex: / etc随后将返回相同的对象。最多需要考虑是否需要在将对象放入数组后继续拥有对象,完全根据您自己的要求。 NSArray完全负责自己的内存管理。

NSArray的情况下,它如何管理内部的保留和释放是众所周知的,你的文字问题已由Noah和Joe回答。但是你永远不应该依赖具有特定实现的另一个对象。