2011-05-10 44 views
1

在創建NSMutableData期間,我有泄漏。我釋放webData2在connectionDidFinishLoading ...創建NsMutableData期間泄漏

webData2 = [[NSMutableData alloc]init]; 

所以我有測試此:

NSMutableData *test =[[NSMutableData alloc]init]; 
webData2 = test; 
[test release]; 

,我對指令泄漏:NSMutableData *test =[[NSMutableData alloc]init];

我不明白!任何人有想法?

謝謝!

GT

+0

+1不適合你的問題,而是你的問題。哎呀! – makdad 2011-05-10 19:50:29

回答

4

這是行不通的,在webData2參考相同test和將被釋放。

  1. webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
  2. NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
  3. webData2 = test; // test and webData2 both points to A, nothing points to B
  4. [test release]; // object B is released, test and webData2 points to garbage

所以問題是在3號線,在這裏你不再有明確的參考對象B在1號線

分配

您需要釋放webData2分配給它一個新的對象指針。

由於bbum指出泄漏始終指的是對象的分配位置,而不是實際泄漏的位置。

如果有疑問,請使用靜態分析儀(實際上總是隨時運行靜態分析儀)。您將在Xcode下的Build菜單中找到它,編號爲Build and Analyze。它會在很多錯誤中找到大部分內存泄漏,並在邊緣用藍色箭頭標記它們。展開箭頭將顯示從分配到最後一個引用丟失的泄漏的完整程序流程。

+2

好答案;請注意,泄漏會向您顯示泄漏對象的分配位置,而不是其泄漏位置。有時讓人困惑。 – bbum 2011-05-10 15:36:08

0

你可以做的是:

NSMutableData *test =[[NSMutableData alloc]init]; 
webData2 = [test copy]; 
[test release]; 

然後webData2將不會與試驗中所釋放在一起......你必須在以後將其釋放。