当我分析一个类时,我正在处理以下代码行:
myObject.myImageData = [NSData dataWithContentsOfURL:[[NSURL alloc] initWithString:myObject.thumbnailUrlString]];
有警告Potential leak of an object
。
知道为什么以及如何解决它吗?
====注意
如果我尝试将这一行分开,则会出现其他错误,例如
NSData *myImageData = [NSData dataWithContentsOfURL:[[NSURL alloc] initWithString:myObject.thumbnailUrlString]]; // 1. Method returns an Objective-C object with a +0 retain count
myObject.myImageData = myImageData;
[myImageData release]; // 2. Incorrect decrement of the reference count of an object that is not owned at this point by the caller
您没有打开ARC。几乎可以肯定,您应该打开ARC,以便系统为您处理所有这一切。
就是说,这是一个基本的手动内存管理错误,分析仪正在告诉您。
myObject.myImageData = [NSData dataWithContentsOfURL:[[NSURL alloc] initWithString:myObject.thumbnailUrlString]];
这会泄漏NSURL
您使用创建的内容+alloc
。您需要release
在某个时候调用它,但是不再有指向它的指针。解决此问题的通常方法是使用autoreleased NSURL
:
myObject.myImageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:myObject.thumbnailUrlString]];
但是修复它的更好的方法是打开ARC。
您尝试修复它会释放错误的对象。你不拥有myImageData
。您没有使用alloc
,new
或来创建它,copy
也没有调用retain
它。分析仪警告您错误地释放了它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句