3

我在谷歌上搜索了与 UIImage 相关的内存问题,发现很多线程都在谈论这个问题,但没有真正的帮助或解决方案。

我知道当我们使用-imageNamed:对象时会被缓存,所以最好使用initWithData:. 当我们使用drawRect:andUIGraphicsGetImageFromCurrentImageContext()时,图像会被缓存吗?

同样在以下代码中:

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

尽管文档中没有关于此的参考,但是否进行了缓存?我们如何释放被缓存消耗的内存?

4

1 回答 1

0

我不确定您的第一个问题的答案,但就第二个问题而言,您应该注意,当您访问 UIImage 的 CGImage 属性时,整个图像都会加载到内存中。这在CGImage 属性的文档中被引用。

如果图像在使用后处理完毕,只需调用 UIImage 上的 release 方法即可释放内存。如果您想保留它但将其从缓存中删除,除了将图像写入磁盘,释放它然后使用创建新图像之外,我想不出任何其他方法-initWithData:

于 2009-10-07T15:18:38.663 回答