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