我搜索了与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);
虽然文档中没有关于此的参考,但缓存是否会发生?我们如何释放缓存消耗的内存?
答案 0 :(得分:0)
我不确定你的第一个问题的答案,但就第二个问题而言,你应该注意到当你访问UIImage的CGImage属性时,整个图像被加载到内存中。这在documentation for the CGImage property。
中引用如果您在使用后完成了图像,则只需在UIImage上调用release方法即可释放内存。如果你想保留它但是从缓存中删除它,我想不出除了将图像写入磁盘,释放它然后使用-initWithData: