下面是我的一个方法中的代码,其中imageRaw是一个变量:
if (imageRaw)
[imageRaw release]; // error occurs here
.
.
.
if (anImage)
imageRaw = [[anImage scaleToFitWithin:maxImageSize interpolationQuality:kCGInterpolationHigh] retain];
我偶尔会有这种类型的错误,我真的不明白它。它非nil的唯一方式是通过赋值给正确类的实例UIImage。
启用僵尸。
在这种情况下,我所要做的就是使现有的实例被释放,这样我就可以实例化并分配/保留一个新的指针。
我猜这里发生的事情是,在你执行的某个时候,当你有东西存储在imageRaw
中,但在anImage
中没有任何东西时,这个方法被调用。在这种情况下,你的对象在imageRaw
将被释放,但没有新的将被存储到它。这将为imageRaw
中被释放的对象留下内存地址,但是该对象不再存在。然后,下次运行该方法时,它检查imageRaw
是否为非nil(它是,因为它仍然持有该内存地址),并尝试在该内存上调用release
,结果失败。为了避免这种情况,您可以确保在每次调用release时将imageRaw
设置为nil:
if (imageRaw)
[imageRaw release];
imageRaw = nil;
.
.
.
if (anImage)
imageRaw = . . .