对象的潜在泄漏 - NSData

Potential leak of an object - NSData

当我分析 class 时,我正在处理这行代码:

    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]];

这会泄露您使用 +alloc 创建的 NSURL。您需要在某个时候对其调用 release,但您不再拥有指向它的指针。解决这个问题的通常方法是使用自动释放的 NSURL:

myObject.myImageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:myObject.thumbnailUrlString]];

但更好的修复方法是打开 ARC。

您修复它的尝试释放了错误的对象。您不拥有 myImageData。您没有使用 allocnewcopy 创建它,也没有在其上调用 retain。分析器警告您释放错误。