2013-04-12 47 views
1

我从webview渲染图像。所以renderIncontext方法在for循环中调用超过50次。 20或30次后,我的应用程序崩溃,因为更多的内存消耗。renderInContext抛出崩溃

我用这个代码:

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它得到坠毁。我需要它的解决方案。

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

+0

HI,你找到了一个解决方案,即时通讯也有同样的问题?如果是的话请共享解决方案 – Infaz

回答

2

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

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

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

+0

对不起,我忘了提,所有上面的代码是由包装@autorelease。 @autorelease {“My COde”}。它帮助了我,但没有预料到 –

+0

你可以发布更多的上下文吗?你如何使用从UIGraphicsGetImageFromCurrentImageContext获得的UIImage对象?具体来说,我想知道他们是否全部被保留。 –

+0

@autoreleasepool {int i = 0; i

相关问题