0

我收到了添加到glossTerms(除了第一個對象)的每個對象的內存泄漏。泄漏被描述爲具有「A + 1保留計數(擁有引用)」 - 我已經搜索了互聯網,並發現了一些提到在對象分配中使用「複製」的線程。我試過這個,但是我不能正確實現它,因爲我仍然有內存泄漏。初始化NSMutableDictionary時iPhone內存泄漏

- (void)createTermData { 

NSMutableArray *glossTerms=[[NSMutableArray alloc] init]; 

[glossTerms addObject:[[NSMutableDictionary alloc] 
         initWithObjectsAndKeys:@"Approximate",@"term", 
         @"Test",@"definition",@"Test2",@"example",nil]]; 

[glossTerms addObject:[[NSMutableDictionary alloc] 
         initWithObjectsAndKeys:@"Arithmetic Mean",@"term", 
         @"Test",@"definition",@"Test2",@"example",nil]]; 

termData=[[NSMutableArray alloc] initWithObjects: 
      glossTerms,nil]; 

[glossTerms release]; 

如果你們中的任何一個人都能夠解釋這一點,我會非常感激。

謝謝

回答

2

一個NSArray將保留您添加到它,並自動釋放它的任何對象,無論是在結束它的生命週期或者一旦你從數組中刪除它(如果它是可變的)。

當你分配一個對象時,它的保留計數是+1。

因此,當您分配一個對象並將其添加到數組時,它的保留計數爲+2。這意味着你必須自動釋放對象(這是我爲你的情況做的,因爲你正在分配你添加的同一行),或者如果你有一個指針的引用,在添加它之後釋放它。在你的情況下,你沒有參考,所以autoreleasing它是你最好的選擇。

NSMutableArray *glossTerms=[[NSMutableArray alloc] init]; 

[glossTerms addObject:[[[NSMutableDictionary alloc] 
         initWithObjectsAndKeys:@"Approximate",@"term", 
         @"Test",@"definition",@"Test2",@"example",nil] autorelease]]; 

[glossTerms addObject:[[[NSMutableDictionary alloc] 
         initWithObjectsAndKeys:@"Arithmetic Mean",@"term", 
         @"Test",@"definition",@"Test2",@"example",nil] autorelease]]; 

termData=[[NSMutableArray alloc] initWithObjects: 
      glossTerms,nil]; 

[glossTerms release]; 

FWIW,靜態方法[NSMutableDictionary dictionaryWith ...]自動返回一個自動釋放對象。

+0

我真的很感謝回覆,謝謝! – Lee 2011-04-20 23:58:30

+0

邁克這是一個很好的迴應,非常感謝你的回答。完美解決了我的問題! – ninu 2011-07-13 18:25:54