2013-04-12 71 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

相關問題