Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOs内存管理新手问题_Iphone_Ios_Memory Management - Fatal编程技术网

Iphone iOs内存管理新手问题

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*。由于该方法不是以init、new或alloc、how write in apple memory management guide开始的,所以我返回autorealese对象

-(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。但如果分析工具显示警告,则不能在保留前重新设置数组?分析工具并不总是正确的。如果您运行应用程序,但对象未发布,则一切正常。