繁体   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