我正在从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/

10-12 14:40