簡體   English   中英

在創建NsMutableData期間泄漏

[英]Leak during the creation of a NsMutableData

在創建NSMutableData期間,我有一個泄漏。 我在connectionDidFinishLoading中發布webData2 ...

webData2 = [[NSMutableData alloc]init];

所以我測試了這個:

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

我的指令有泄漏: NSMutableData *test =[[NSMutableData alloc]init];

我不明白! 有誰有想法?

謝謝!

GT

這是行不通的,在參考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行,你不再明確地引用第1行分配的對象B.

您需要在使用新對象指針分配webData2之前釋放它。

正如bbum指出的那樣,泄漏總是指對象的分配位置,而不是實際泄漏的位置。

如有疑問,請使用靜態分析儀(實際上總是經常運行靜態分析儀)。 您可以在Build菜單下的Xcode中找到它作為Build and Analyze 它會在許多錯誤中發現大多數內存泄漏,並在邊距中用藍色箭頭標記它們。 展開箭頭將顯示從分配到最后一個參考丟失的泄漏的完整程序流程。

你能做的是:

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

然后webData2將不會與測試一起發布...您將不得不稍后發布它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM