我是怎么意味着释放从类方法返回的数组?

时间:2011-06-11 23:55:50

标签: objective-c ios cocoa-touch memory-management memory-leaks

我的代码部分调用了一个返回NSMutableArray的方法,如下所示:

+(NSMutableArray *)method {

NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];

    return rgb;

}

每次打电话都会给我泄漏。在[rgb release];之后放置return似乎不起作用。将它放在return之前会导致我的应用崩溃。同时加入autorelease会导致我的应用崩溃。建议?

2 个答案:

答案 0 :(得分:7)

+(NSMutableArray *)method {
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];
    return [rgb autorelease];
}

可替换地:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil];
    return rgb;
}

如果这仍然崩溃,那么问题很可能在该方法之外,而不是在。

之内

答案 1 :(得分:4)

  

但这每次都让我泄漏   它被称为。放一个[rgb发布];   返回后似乎不起作用。   在返回之前把它放到我的应用程序   崩溃。还要进行自动释放   使我的应用程序崩溃。建议?

您需要阅读Cocoa Memory Management Guidelines。很明显,这样的方法必须自动释放返回的对象:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];

    return [rgb autorelease];
}

或者,或者:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil];

    return rgb;
}

过度保留(如代码中)不会导致崩溃(至少在内存不足之前)。如果您遇到崩溃,很可能是因为您在其他方面对内存管理不善。

尝试使用构建和分析并修复它识别的所有问题。如果它仍然崩溃,请发布崩溃的回溯,如果你无法弄清楚原因。