我的代码部分调用了一个返回NSMutableArray
的方法,如下所示:
+(NSMutableArray *)method {
NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];
return rgb;
}
每次打电话都会给我泄漏。在[rgb release];
之后放置return
似乎不起作用。将它放在return
之前会导致我的应用崩溃。同时加入autorelease
会导致我的应用崩溃。建议?
答案 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;
}
过度保留(如代码中)不会导致崩溃(至少在内存不足之前)。如果您遇到崩溃,很可能是因为您在其他方面对内存管理不善。
尝试使用构建和分析并修复它识别的所有问题。如果它仍然崩溃,请发布崩溃的回溯,如果你无法弄清楚原因。