对象的潜在泄漏 - 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
。您没有使用 alloc
、new
或 copy
创建它,也没有在其上调用 retain
。分析器警告您释放错误。
当我分析 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
。您没有使用 alloc
、new
或 copy
创建它,也没有在其上调用 retain
。分析器警告您释放错误。