修复以下代码的内存泄漏

时间:2012-02-28 11:58:36

标签: iphone objective-c ios5

我在修复返回数组的内存泄漏方面存在问题,如何修复以下数组的内存泄漏?

    NSMutableArray *retArr = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0; i < 10; i++) {
    [retArr insertObject:[arr objectAtIndex:i] atIndex:i];
}
[arr release];
return retArr;

4 个答案:

答案 0 :(得分:3)

除非方法名称以new,alloc,copy或mutableCopy开头,否则通常应该自动释放返回值。

return [retArr autorelease];

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-SW6

答案 1 :(得分:2)

在NSMutableArray上使用autorelease

NSMutableArray *retArr = [[[NSMutableArray alloc] initWithCapacity:10] autorelease];
for (int i=0; i < 10; i++) {
    [retArr insertObject:[arr objectAtIndex:i] atIndex:i];
}
[arr release];
return retArr;

答案 2 :(得分:1)

您需要自动释放数组并将其放入autoreleasepool中,以便在一段时间后自动释放。

NSMutableArray *retArr = [[[NSMutableArray alloc] initWithCapacity:10] autorelease];

希望这会对你有所帮助。

答案 3 :(得分:0)

您可以在阵列上使用自动释放:

NSMutableArray *retArr = [[[NSMutableArray alloc] initWithCapacity:10] autorelease];
for (int i=0; i < 10; i++) {
[retArr insertObject:[arr objectAtIndex:i] atIndex:i];

    }

[arr release];
return retArr;