当我分析一个类时,我正在研究这行代码:
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
答案 0 :(得分:0)
您没有开启ARC。你几乎肯定应该打开ARC,以便系统为你处理所有这些。
也就是说,这是一个基本的手动内存管理错误,分析器正在告诉你。
myObject.myImageData = [NSData dataWithContentsOfURL:[[NSURL alloc] initWithString:myObject.thumbnailUrlString]];
这会泄漏您使用NSURL
创建的+alloc
。您需要在某个时刻调用release
,但您不再指向它。解决此问题的常用方法是使用自动释放的NSURL
:
myObject.myImageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:myObject.thumbnailUrlString]];
但更好的解决方法是打开ARC。
您尝试修复它会释放错误的对象。您没有myImageData
。您没有使用alloc
,new
或copy
创建它,也没有在其上调用retain
。分析仪警告您错误地释放它。