2011-08-05 4 views
0

この状況での書き込み方法:iOSメモリ管理に関する初心者質問

私はNSMutableArray *を返すメソッドをいくつか持っています。メソッドは、init、newまたはallocで始まっていないので、appleのメモリ管理ガイドに書き込む方法、私はautorealeseオブジェクトを返します。

-(NSMutableArray*)someMethod { 

    NSMutableArray *array = [NSMutableArray alloc] init] autorealese]; 
    //Some code here 
    return array; 
} 

そして、私はこの1つを呼び出すいくつかの他の方法を、持っている:

-(NSMutableArray*)method1 { 
    NSMutableArray *array = nil; 
    if(condition){ 
     array = [self someMethod]; 
    } 
    return array; 
} 

-(NSMutableArray*)method2 { 
    NSMutableArray *array = nil; 
    array = [self method1]; 
} 

コードwork.ButはXCodeをツールを分析し、これを作成する方法を、方法2で私は、カウント0のオブジェクトを取得することを言いますコードは良いですか?

答えて

1

method2がオートリリースされた配列を返す点を除いて、コードに問題はありません。したがって、このメソッドを呼び出すものは何でも戻り値を保持する必要があります。

+0

はい、私はメソッドを返すオブジェクトを保持します。しかし、分析ツールショーの警告、状況ができない場合、配列は保持する前にreales? – KoirN

+0

分析ツールは必ずしも正しいとは限りません。あなたのアプリを実行し、オブジェクトがリリースされていない場合、すべてがOKです。 – rckoenes

0

自動リリースされたNSMutableArrayを作成して返します。

-(NSMutableArray*)someMethod { 

     NSMutableArray *array = [NSMutableArray alloc] init] autorealese]; 
     //Some code here 
     return array; 
    } 

method1はsomeMethodのautorelease NSMutableArrayを使用し、Method1の存続期間中は配列はオートリリースされません。これは、オブジェクトがメソッドサイクルを通して存続する、客観的なメモリ管理のルールの1つです。

method2はmethod1から自動リリースされたNSMutableArrayを待っています。 b/cの場合、method2に条件があり、配列がnilである可能性があることに注意することが重要です。

-(NSMutableArray*)method2 { 
    NSMutableArray *array = nil; 
    array = [self method1]; 
} 

つまり、メソッドに沿って自動解放されたオブジェクトを渡しています。これには何も問題はありません。 method2の値を保存したい場合は、それを保持する必要があるか、または自動解放されることを忘れないでください。

メソッド1の状態のため、アナライザはb/cに苦情を言いますが、method1がオブジェクトを返すとは保証されません.nilが返される可能性があります。