[英]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
,将被释放。
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 。 它会在许多错误中发现大多数内存泄漏,并在边距中用蓝色箭头标记它们。 展开箭头将显示从分配到最后一个参考丢失的泄漏的完整程序流程。
你能做的是:
NSMutableData *test =[[NSMutableData alloc]init];
webData2 = [test copy];
[test release];
然后webData2将不会与测试一起发布...您将不得不稍后发布它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.