保留使用UIGraphicsGetImageFromCurrentImageContext创建的UIImage的所有权

时间:2010-12-16 18:29:37

标签: iphone memory-management uiimage screenshot

我正在使用此代码在不同时间获取窗口的屏幕截图,并将创建的UIImage放入一个数组中,该数组传递给另一个UIViewController,以便它们可以全部显示在网格中。我尝试释放UIImage,内存使用情况永远不会下降......我怎么能在这里使用图像,并保留所有权,这样我就可以在显示内存后释放内存

UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[imagesArray addObject:image];
[image release];

3 个答案:

答案 0 :(得分:9)

UIGraphicsGetImageFromCurrentImageContext()返回“包含当前位图图形上下文内容的自动释放的图像对象。”

当您将图像添加到imagesArray时,NSMutableArray会对其进行保留,并且 这就是你所需要的一切。从阵列中移除图像时将释放内存。

不应在图片上调用发布。

答案 1 :(得分:2)

我在UIGraphicsGetImageFromCurrentImageContext()上发生了内存崩溃...如果你正在创建和发布它们中的很多内容,你应该为每次迭代将它们包装在一个新的AutoReleasePool中。甚至允许NSRunLoop为Apple / iOS提供足够的功能,以便对此处的垃圾进行清理。

e.g。

for( ... )
{
   @autoreleasepool
   {
      UIImage* blah = UIGraphicsGetImageFromCurrentImageContext();
   }
}

答案 2 :(得分:0)

我在后台线程中使用来自UIGraphicsGetImageFromCurrentImageContext()的保留UIImage图像获得了一个奇怪的UIImage内存泄漏。问题是你应该只从你的应用程序的主线程中调用这个函数。当心。