Ios renderInContext抛出崩溃

Ios renderInContext抛出崩溃,ios,objective-c,core-graphics,quartz-graphics,Ios,Objective C,Core Graphics,Quartz Graphics,我正在从webview渲染图像。所以renderIncontext方法在for循环中调用了50多次。由于内存消耗过多,我的应用程序崩溃了20到30次 我使用了以下代码: UIGraphicsBeginImageContext(CGSizeMake([w floatValue], [h floatValue])); CGContextRef ctx = UIGraphicsGetCurrentContext(); [[UIColor blackColor] set]; CGContextFillR

我正在从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对象持久化,您仍然需要分配大量内存。将生成的图像保存到磁盘上的临时目录(或其他方便的地方),并根据需要单独获取它们。

很抱歉,我忘了提到@autorelease包装了上述所有代码@自动释放{“我的代码”}。这对我很有帮助,但不是我所期望的。你能提供更多的信息吗?如何使用从
UIGraphicsGetImageFromCurrentImageContext
获取的UIImage对象?具体地说,我想知道它们是否都被保留了。@autoreleasepool{for(inti=0;看,首先把
@autorelease
放在
for(foo)周围
部分对您没有多大帮助,因为在循环结束之前,不会自动释放任何内容。
@autorelease
应该在循环中。其次,您将所有图像放入一个数组中,因此它们仍然会保留在内存中。您真的需要同时在内存中保存所有图像吗?如果您可以使用JUt显示一个(或几个)每次图像,您可以在生成图像时将图像保存到磁盘上,然后在任何给定时间仅加载要显示的图像,以保持合理的内存占用。@Helenvilege:事实上,您应该无条件地将所有图像保存到缓存目录、文档目录或照片库中,然后加载e只有在需要的时候才使用,并且在出现内存警告时随时准备扔掉任何你没有使用的。嗨,你找到解决方法了吗,我也有同样的问题吗?如果是,请分享解决方案