由于缓存,UIImage内存问题

时间:2009-10-07 15:04:28

标签: iphone memory-management uiimage cgimage

我搜索了与UIImage相关的内存问题,并遇到了很多讨论问题的线程,但没有真正的帮助或解决方案。

我知道当我们使用-imageNamed:时,对象被缓存,因此最好使用initWithData:。当我们使用drawRect:UIGraphicsGetImageFromCurrentImageContext()时,图片会转到缓存吗?

同样在以下代码中:

CGImageRef tmp = CGImageCreateWithImageInRect(imageToCrop.CGImage, clippedRect);    //pull the image from our cropped context    UIImage *cropped = [UIImage imageWithCGImage:tmp];//UIGraphicsGetImageFromCurrentImageContext();  
CGImageRelease(tmp);

虽然文档中没有关于此的参考,但缓存是否会发生?我们如何释放缓存消耗的内存?

1 个答案:

答案 0 :(得分:0)

我不确定你的第一个问题的答案,但就第二个问题而言,你应该注意到当你访问UIImage的CGImage属性时,整个图像被加载到内存中。这在documentation for the CGImage property

中引用

如果您在使用后完成了图像,则只需在UIImage上调用release方法即可释放内存。如果你想保留它但是从缓存中删除它,我想不出除了将图像写入磁盘,释放它然后使用-initWithData:

创建新图像之外的任何其他方式