2011-08-05 63 views
0

如何在這種情況下寫對:關於iOs內存管理的新手問題

我有一些方法,返回NSMutableArray *。因爲方法不是以init,new或alloc開始,所以如何在Apple內存管理指南中寫入,我返回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]; 
} 

代碼work.But的XCode分析工具說,在方法2我與數0對象那麼,該怎麼寫代碼好?

回答

1

您的代碼沒有任何問題,只是method2將返回自動發佈的數組。因此無論調用這個方法應該保留返回值。

+0

是的,我保留對象,返回method2。但是如果分析工具顯示警告,不能成爲情況,當數組重新調整之前保留? – KoirN

+0

分析工具並不總是正確的。如果你運行你的應用程序,而對象不是釋放,那麼一切都好。 – rckoenes

0

創建一個自動釋放的NSMutableArray並返回它。

-(NSMutableArray*)someMethod { 

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

方法1使用someMethod中的autorelease NSMutableArray,對於Method1的生命期,數組將不會自動釋放。這是objective-c中內存管理的規則之一,即對象在方法循環中生存。

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

Method2仍然在等待自動釋放來自method1的NSMutableArray。請注意,在b/c中您在method2中的條件數組可能爲零是很重要的。

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

所以換句話說,你是沿着你的方法傳遞自動釋放對象。這沒有什麼錯。你只需要記住,如果你想存儲method2的值,你需要保留它,否則它會被自動釋放。

由於您在method1中的條件,分析器會抱怨b/c並不能保證method1將返回一個對象,它有可能返回nil。