图像旋转后应保持计数增加吗?

时间:2012-03-19 17:52:32

标签: ios xcode memory-management

我正在使用以下代码来旋转图像

http://www.platinumball.net/blog/2010/01/31/iphone-uiimage-rotation-and-scaling/

这是我在将图像上传到服务器之前进行的为数不多的图像转换之一,我还有其他一些转换:normalize,crop,resize。

每个转换返回(UIImage*),我使用类别添加这些函数。我这样用它:

UIImage *img = //image from camera;
img = [[[img normalize] rotate] scale] resize];
[upload img];

每次在XCode中收到内存警告消息后,从相机中选择3~4张照片并执行相同的代码。

我猜我某处有内存泄漏(即使我使用ARC)。我在使用xCode调试工具方面不是很有经验,所以我开始在每种方法之后打印保留计数。

UIImage *img = //image from camera;
img = [img normalize];
img = [img rotate];  // retain count increases :(
img = [img scale];
img = [img resize];

增加保留计数的唯一操作是旋转。这是正常的吗?

1 个答案:

答案 0 :(得分:2)

  

增加保留计数的唯一操作是旋转。这是正常的吗?

UIGraphicsGetImageFromCurrentImageContext()功能中的rotate调用很可能最终会保留图像。如果是这样,它几乎肯定也会自动释放图像,以符合正常的Cocoa内存管理规则。无论哪种方式,你都不应该担心它。只要您的rotate功能本身不包含任何不平衡retain(或allocnewcopy)来电,您就应该期待没有泄漏。如果你确实怀疑有泄漏,最好用仪器跟踪它而不是自己看retainCount