我在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)
如果我也使用自动释放,它会显示内存泄漏。如何解决这个漏洞?
答案 0 :(得分:6)
如果从readEditions
返回的数组未自动释放,则会违反Object ownership policy。
你应该释放循环内的对象,因为如果readEditions
返回一个保留计数&gt;的对象,它会在循环的每次迭代后泄露。 0
您应该从readEditions
返回自动释放的对象,因为方法名称不包含alloc
,new
或copy
。
然后,如果你愿意,你可以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];
}