我用谷歌搜索与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);


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

最佳答案

我不确定第一个问题的答案,但是至于所涉及的第二个问题,您应该注意,当您访问UIImage的CGImage属性时,整个图像都将加载到内存中。这在documentation for the CGImage property中引用。

如果在使用完图像后完成操作,则只需在UIImage上调用release方法即可释放内存。如果要保留它但将其从缓存中删除,除了将映像写入磁盘,释放映像然后使用-initWithData:创建新映像外,我别无选择

关于iphone - 由于缓存UIImage内存问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1532210/

10-09 07:02
查看更多