2009-10-07 69 views
3

我搜索与UIImage相关的内存问题,并遇到许多线程谈论这个问题,但没有真正的帮助或解决方案。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

我想知道关于这一点。我有一个背景UIImageView,通过点击一个按钮进行滚动,在每个按钮的位置,它使用[UIImage imageNamed:...]设置为另一个图像,并且分配的实时字节只是不断增加。如何正确处理这个问题? – GeneCode 2012-02-22 03:17:40

回答

0

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

如果您在使用后完成了图像,您可以简单地调用UIImage上的release方法来释放内存。如果你想保留它但从缓存中删除它,我想不出除了写图像到磁盘,释放它,然后创建一个新的图像使用-initWithData: