为什么要释放这个对象?

时间:2010-10-14 06:21:05

标签: iphone objective-c

我在以下代码段的最后一行发布EXC_BAD_ACCESS时收到newImage

UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[self setImageToSave:newImage];
[newImage release];

我假设newImage在上一行调用时被释放。如果是这样,为什么它会以setImageToSave方法发布?

1 个答案:

答案 0 :(得分:4)

看起来像这一行:

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

正在创建一个自动释放的对象。在该行之间和此行之前:

[newImage release];

..它正在自动释放。您正试图释放一个自动释放(并且已经发布)的对象,这就是您收到该错误的原因。删除版本。至于这一行:

[self setImageToSave:newImage];

如果您需要为任何版本保存newImage,您应该保留在此处或在setImageToSave方法中。请记住,由于您手动保留它,因此您需要在同一方法或其他地方的某个时刻将其与版本匹配。