如何释放在Objective C中的for循环内创建的数组?

时间:2010-11-01 05:18:03

标签: iphone memory-management memory-leaks

我在for循环中创建了一个数组,但我无法释放它。它显示内存泄漏。这是我的代码:

for(int i = 0; i < [magArr count]; i++)
{
   Magazine *magObj = [magArr objectAtIndex:i];
   NSMutableArray *myArray = [data readEditions:[magObj.magazineID intValue]:0];//returns a array
}
[myArray release]; // memory leaks (retain count to -1)

如果我也使用自动释放,它会显示内存泄漏。如何解决这个漏洞?

1 个答案:

答案 0 :(得分:6)

如果从readEditions返回的数组未自动释放,则会违反Object ownership policy

你应该释放循环内的对象,因为如果readEditions返回一个保留计数&gt;的对象,它会在循环的每次迭代后泄露。 0

您应该从readEditions返回自动释放的对象,因为方法名称不包含allocnewcopy

然后,如果你愿意,你可以retain自动释放的对象来保持它。

以下是readEditions返回自动释放对象时循环外观的示例:

for(int i = 0; i < [magArr count]; i++)
{
   Magazine *magObj = [magArr objectAtIndex:i];
   NSMutableArray *myArray = [[data readEditions:[magObj.magazineID intValue]:0] retain];
   //do something with myArray...
   [myArray release];
}