在创建NSMutableData期间,我有一个泄漏。我在connectionDidFinishLoading ...
中发布了webData2webData2 = [[NSMutableData alloc]init];
所以我测试了这个:
NSMutableData *test =[[NSMutableData alloc]init];
webData2 = test;
[test release];
我的说明有泄漏:NSMutableData *test =[[NSMutableData alloc]init];
谢谢!
GT
答案 0 :(得分:4)
这不起作用,webData2
中的引用与test
相同,并将被释放。
webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
webData2 = test; // test and webData2 both points to A, nothing points to B
[test release]; // object B is released, test and webData2 points to garbage
所以问题出在第3行,你不再对第1行分配的对象B有明确的引用。
在为新对象指针指定之前,您需要释放webData2
。
正如bbum所指出的那样,泄漏总是指的是分配对象的位置,而不是实际泄漏的位置。
如有疑问,请使用静态分析仪(实际上总是经常运行静态分析仪)。您可以在 Build 菜单下的Xcode中找到它,作为 Build and Analyze 。它会在许多错误中发现大多数内存泄漏,并在边距中用蓝色箭头标记它们。展开箭头将显示从分配到最后一个参考丢失的泄漏的完整程序流程。
答案 1 :(得分:0)
你能做的是:
NSMutableData *test =[[NSMutableData alloc]init];
webData2 = [test copy];
[test release];
然后webData2将不会与测试一起发布......您将不得不稍后发布它。