【问题标题】:How to release a array which is created inside a for loop in Objective C?如何释放在Objective C的for循环中创建的数组?
【发布时间】:2011-05-03 06:43:21
【问题描述】:

我在 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)

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

【问题讨论】:

  • 你能把readEditions的内容贴出来吗?作为一般规则,名称中不包含 new、init 或 copy 的方法应返回一个自动释放的对象。因此,基于该假设,您不需要在上面的代码中发布任何内容。

标签: iphone memory-management memory-leaks


【解决方案1】:

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

您应该释放循环内的对象,因为如果readEditions 返回一个保留计数 > 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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多