1

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

webData2 = [[NSMutableData alloc]init];

所以我对此进行了测试:

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

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

我不明白 !有人有想法吗?

谢谢!

燃气轮机

4

2 回答 2

4

这将不起作用,参考webData2test将被释放。

  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 指出的那样,泄漏总是指对象的分配位置,而不是实际泄漏的位置。

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

于 2011-05-10T15:18:45.050 回答
0

你可以做的是:

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

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

于 2011-05-10T16:27:02.213 回答