Iphone iOs内存管理新手问题
在这种情况下如何正确书写: 我有一些方法,返回NSMutableArray*。由于该方法不是以init、new或alloc、how write in apple memory management guide开始的,所以我返回autorealese对象Iphone iOs内存管理新手问题,iphone,ios,memory-management,Iphone,Ios,Memory Management,在这种情况下如何正确书写: 我有一些方法,返回NSMutableArray*。由于该方法不是以init、new或alloc、how write in apple memory management guide开始的,所以我返回autorealese对象 -(NSMutableArray*)someMethod { NSMutableArray *array = [NSMutableArray alloc] init] autorealese]; //Some code here
-(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的对象。那么,如何编写好这段代码呢?您的代码没有问题,只是
method2
将返回自动释放的数组。因此,无论调用此方法的是什么,都应该保留返回值。创建一个自动删除的NSMutableArray并返回它
-(NSMutableArray*)someMethod {
NSMutableArray *array = [NSMutableArray alloc] init] autorealese];
//Some code here
return array;
}
Method1使用someMethod中的自动释放NSMutableArray,在Method1的生命周期内,该数组将不会自动释放。这是objective-c中内存管理的规则之一,对象贯穿方法周期
-(NSMutableArray*)method1 {
NSMutableArray *array = nil;
if(condition){
array = [self someMethod];
}
return array;
}
Method2使用仍在等待从method1自动删除的NSMutableArray。需要注意的是,b/c方法2中有一个条件,数组可能为零
-(NSMutableArray*)method2 {
NSMutableArray *array = nil;
array = [self method1];
}
换句话说,您正在沿着方法传递自动释放的对象。这没什么错。你只需要记住,如果你想存储method2的值,你需要保留它,否则它会被自动删除
由于您在method1中的情况,分析仪将投诉b/c无法保证method1将返回一个对象,它有可能返回nil。是的,我保留对象,即返回方法2。但如果分析工具显示警告,则不能在保留前重新设置数组?分析工具并不总是正确的。如果您运行应用程序,但对象未发布,则一切正常。