如何在这种情况下正确写作:
我有一些返回NSMutableArray *的方法。因为方法不是用init,new或alloc启动的,所以如何写入apple内存管理指南,我返回自动审批对象。
-(NSMutableArray*)someMethod {
NSMutableArray *array = [NSMutableArray alloc] init] autorealese];
//Some code here
return array;
}
我还有另外一种方法,称之为:
-(NSMutableArray*)method1 {
NSMutableArray *array = nil;
if(condition){
array = [self someMethod];
}
return array;
}
-(NSMutableArray*)method2 {
NSMutableArray *array = nil;
array = [self method1];
}
代码工作。但是XCode分析工具说在method2中我得到了一个计数为0的对象。那么,如何编写这段代码呢?
答案 0 :(得分:1)
除了method2
将返回自动释放的数组之外,您的代码没有任何问题。因此,无论调用此方法,都应保留返回值。
答案 1 :(得分:0)
创建一个自动释放的NSMutableArray并返回它。
-(NSMutableArray*)someMethod {
NSMutableArray *array = [NSMutableArray alloc] init] autorealese];
//Some code here
return array;
}
Method1使用someMethod中的autorelease NSMutableArray,并且在Method1的生命周期中,数组不会被自动释放。这是Objective-c中的内存管理规则之一,对象通过方法循环生存。
-(NSMutableArray*)method1 {
NSMutableArray *array = nil;
if(condition){
array = [self someMethod];
}
return array;
}
Method2使用仍然等待来自method1的自动释放的NSMutableArray。重要的是要注意b / c你在method2中有条件,数组可能是nil。
-(NSMutableArray*)method2 {
NSMutableArray *array = nil;
array = [self method1];
}
换句话说,你沿着你的方法传递自动释放的对象。这没什么不对。你只需要记住,如果你想存储method2的值,你需要保留它,否则它将被自动释放。
由于你在method1中的条件,分析器会抱怨b / c不能保证method1会返回一个对象,有可能返回nil。