我正在从webview渲染图像。因此renderIncontext方法在for循环中调用了50次以上。 20或30次后,由于更多的内存消耗,我的应用程序崩溃了。
我使用以下代码:
UIGraphicsBeginImageContext(CGSizeMake([w floatValue], [h floatValue]));
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, webview.frame);
[self.webview.layer renderInContext:ctx];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
20次后,它坠毁了。我需要它的解决方案。
为什么会这样?有谁知道?
最佳答案
听起来您正在紧密地创建大量位图图像。您需要保存所需的图像(如果需要它们,可以保存在磁盘上,而不是存储在内存中),并允许自动释放内存中的图像。将循环的主体包裹在@autorelease
块中,如下所示:
for (whatever) {
@autorelease {
// Work that makes big autoreleased objects.
}
}
这样,您的内存消耗将不会在循环内失控。同样,如果使所有这些UIImage对象都保持不变,您仍将分配大量内存。将生成的图像保存到磁盘上的临时目录(或其他方便的位置)中,并根据需要分别获取它们。
关于ios - renderInContext引发崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15979193/