2011-11-14 185 views
0

我很確定這是造成泄漏,我想要一些建議。這是基於代碼的我在做什麼:基於這樣的事實,我對NSMutableArray的分配空間,而不是釋放它,那是一個正確的泄漏iOS內存泄漏建議

NSMutableArray* straVideoTitles; 

- (void) parseData{ 
    //stuff 
    straVideoTitles = [self getVideoTitle:strData]; //strData contains unparsed data 
    //more stuff 
} 

- (NSMutableArray*) getVideoTitles:(NSString*)strData{ 
    NSMutableArray *array; 
    array = [[NSMutableArray alloc] init]; 
    //Parse data and populate array 
    return array; 
} 

?我如何解決這個問題?我應放棄返回一個值,並指定straVideoTitles內getVideoTitles然後釋放,如:

- (void) getVideoTitles:(NSString*)strData{ 
    NSMutableArray *array; 
    array = [[NSMutableArray alloc] init]; 
    //Parse data and populate array 
    straVideoTitles = array; 
    [array release]; 
} 

還是我這一切錯了嗎?或者一切正常,因爲我在dalloc中釋放straVideoTitles?

回答

3

你可以改變

return array; 

return [array autorelease]; 

或者你可以使用ARC,只是不關心它了。

編輯:第二種方法是可能的,不包括內存泄漏,但代碼封裝較少,因此可重用性較差,未來可證明。

+0

看起來這並獲得成功。謝謝。 – Scott

2

更改爲

return [array autorelease];

2

從方法返回autorelease對象是一種很好的做法。這被稱爲延期發佈消息。

您正在放棄所有權,同時允許方法調用方在釋放數組之前使用返回的數組。

你return語句應該是:

return [array autorelease]; 

有關內存管理的詳細信息到這裏看看:

Advanced Memory Management Programming Guide