对象的潜在泄漏 - NSData

时间:2015-02-25 13:46:10

标签: xcode memory-leaks static-analysis

当我分析一个类时,我正在研究这行代码:

    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

1 个答案:

答案 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。您没有使用allocnewcopy创建它,也没有在其上调用retain。分析仪警告您错误地释放它。

相关问题