在创建NsMutableData期间泄漏

时间:2011-05-10 14:52:13

标签: iphone memory-leaks nsmutabledata

在创建NSMutableData期间,我有一个泄漏。我在connectionDidFinishLoading ...

中发布了webData2
webData2 = [[NSMutableData alloc]init];

所以我测试了这个:

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

我的说明有泄漏:NSMutableData *test =[[NSMutableData alloc]init];

我不明白!有谁有想法?

谢谢!

GT

2 个答案:

答案 0 :(得分: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
  5. 所以问题出在第3行,你不再对第1行分配的对象B有明确的引用。

    在为新对象指针指定之前,您需要释放webData2

    正如bbum所指出的那样,泄漏总是指的是分配对象的位置,而不是实际泄漏的位置。

    如有疑问,请使用静态分析仪(实际上总是经常运行静态分析仪)。您可以在 Build 菜单下的Xcode中找到它,作为 Build and Analyze 。它会在许多错误中发现大多数内存泄漏,并在边距中用蓝色箭头标记它们。展开箭头将显示从分配到最后一个参考丢失的泄漏的完整程序流程。

答案 1 :(得分:0)

你能做的是:

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

然后webData2将不会与测试一起发布......您将不得不稍后发布它。