我正在使用此代码在不同时间获取窗口的屏幕截图,并将创建的UIImage放入一个数组中,该数组传递给另一个UIViewController,以便它们可以全部显示在网格中。我尝试释放UIImage,内存使用情况永远不会下降......我怎么能在这里使用图像,并保留所有权,这样我就可以在显示内存后释放内存
UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[imagesArray addObject:image];
[image release];
答案 0 :(得分:9)
UIGraphicsGetImageFromCurrentImageContext()
返回“包含当前位图图形上下文内容的自动释放的图像对象。”
当您将图像添加到imagesArray时,NSMutableArray
会对其进行保留,并且
这就是你所需要的一切。从阵列中移除图像时将释放内存。
您不应在图片上调用发布。
答案 1 :(得分:2)
我在UIGraphicsGetImageFromCurrentImageContext()上发生了内存崩溃...如果你正在创建和发布它们中的很多内容,你应该为每次迭代将它们包装在一个新的AutoReleasePool中。甚至允许NSRunLoop为Apple / iOS提供足够的功能,以便对此处的垃圾进行清理。
e.g。
for( ... )
{
@autoreleasepool
{
UIImage* blah = UIGraphicsGetImageFromCurrentImageContext();
}
}
答案 2 :(得分:0)
我在后台线程中使用来自UIGraphicsGetImageFromCurrentImageContext()的保留UIImage图像获得了一个奇怪的UIImage内存泄漏。问题是你应该只从你的应用程序的主线程中调用这个函数。当心。