1

我正在从 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次后就崩溃了。我需要它的解决方案。

为什么会出现这种情况?有谁知道?

4

1 回答 1

2

听起来您正在紧密循环中创建大量位图图像。您需要保存所需的图像(如果您需要它们,可能在磁盘上而不是在内存中),并允许自动释放内存中的图像。将循环体包裹在一个@autorelease块中,例如:

for (whatever) {
    @autorelease {
        // Work that makes big autoreleased objects.
    }
}

这样,您的内存消耗将不会在循环内失控。同样,如果您使所有这些 UIImage 对象保持不变,您仍将分配大量内存。将生成的图像保存到磁盘上的临时目录(或其他方便的位置),并根据需要单独获取它们。

于 2013-04-12T19:30:46.783 回答