再次我的阵列数组......
当我有一个包含数组“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];
提前致谢
答案 0 :(得分:6)
(b)应该足够了。数组的deallocator将释放所有包含的对象,每个retain都有一个释放(因此多个实例将被释放多次)。
永远不要[[x objectAtIndex:i] release]
- 您没有保留返回的对象,因此您将通过释放它来保留其保留计数。
答案 1 :(得分:-1)
确保没有内存泄漏的最佳方法是,在将该对象添加到数组后,应该释放它,以便对象的保留计数为1,并且只有数组保留它。因此,当您释放数组时,它会向数组中的所有对象发送释放消息,并且所有对象的retainCount将变为0并且它们将是dealloc