1

我有一段代碼&我想了解內存泄漏的可能性。我已經通過Apple文檔here內存泄漏在下面的簡單代碼

這裏的代碼從參數&處理數組,將字典存儲到臨時數組中。

+ (void)setLinkedProfiles:(NSArray *)profileData { 
    NSMutableArray *returnArray = [[NSMutableArray alloc]init]; 
    if([profileData count] > 0) { 
     for(NSDictionary *dict in profileData) { 

      NSDictionary *tempDict = @{ 
            @"verifiedEmail" : ([[dict objectForKey:@"verifiedEmail"] isKindOfClass:[NSNull class]]) ? @"": [dict objectForKey:@"verifiedEmail"], 
            @"identifier" : [dict objectForKey:@"identifier"], 
            }; 
      [returnArray addObject:tempDict]; 
     } 
    } 
    [SharedApp sharedUserData].linkedProfiles = returnArray; 
} 

我懷疑代碼SharedApp sharedUserData].linkedProfiles = returnArray的行可能會產生內存泄漏。 我想了解爲什麼&在哪種情況下? 有人可以幫助我理解這一點嗎?

感謝您閱讀&瞭解我的問題。

+0

你聲明這樣的數組,NSMutableArray * returnArray = [NSMutableArray array]; – karthika

+3

您的項目是否啓用ARC?靜態分析儀是否顯示任何警告?泄漏儀器是否顯示泄漏? –

+0

是的,配置文件分析器顯示爲行 NSMutableArray * returnArray = [[NSMutableArray alloc] init]; 「方法返回帶+1保留計數的Objective-C對象」 和 [SharedApp sharedUserData] .linkedProfiles = returnArray; 對象泄漏:分配並存儲到'returnArray'中的對象稍後在此執行路徑中未引用,並且保留計數爲+1 –

回答

3

要澄清一些事情:

你行

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

爲您提供了陣列的所有權。當你完成它時,你有責任釋放它。

因此增加

[returnArray release]; 

的最後一行是可行的。你可以使用autorelease代替,甚至從一開始就一個autoreleased數組工作,即

NSMutableArray *returnArray = [NSMutableArray array]; 

linkedProfiles應該是很強的參考(即strong,或copy)。

雖然我強烈建議切換到ARC,但對底層內存管理的理解可能會得心應手。