清除/释放数组数组的正确方法

时间:2010-05-16 15:38:58

标签: objective-c cocoa

再次我的阵列数组......

当我有一个包含数组“y”的多个实例的数组“x”时,如何清除/释放它而不会有内存泄漏的风险?

以下是足够的电话吗?

(a)清除阵列

[x removeAllObjects];

(b)释放数组

[x release];

或者我需要枚举数组,例如:

(c)清除阵列

for(int i=0;i<x.count;i++)
    [[x objectAtIndex:i] release];
    [x removeAllObjects];

(d)释放阵列

for(int i=0;i<x.count;i++)
    [[x objectAtIndex:i] release];
    [x release];

提前致谢

2 个答案:

答案 0 :(得分:6)

(b)应该足够了。数组的deallocator将释放所有包含的对象,每个retain都有一个释放(因此多个实例将被释放多次)。

永远不要[[x objectAtIndex:i] release] - 您没有保留返回的对象,因此您将通过释放它来保留其保留计数。

答案 1 :(得分:-1)

确保没有内存泄漏的最佳方法是,在将该对象添加到数组后,应该释放它,以便对象的保留计数为1,并且只有数组保留它。因此,当您释放数组时,它会向数组中的所有对象发送释放消息,并且所有对象的retainCount将变为0并且它们将是dealloc