簡體   English   中英

renderInContext占用大量內存,最終崩潰

[英]renderInContext consumes a lot of memory and eventually crashes

我的UIView非常大,我正在嘗試將其轉換為pdf。 我正在使用renderInContext生成UIView圖像。 執行renderInContext ,內存僅在視圖的1/6處增加100 MB。

如果呈現了整個視圖,則模擬器中的內存將達到350 MB左右,但它將在設備中崩潰。 我嘗試了部分渲染視圖,但是內存一直在增加。

創建映像后不會立即釋放分配的內存。 我嘗試將imageNamed更改為imageWithContentsOfFile,但是沒有運氣。

有什么辦法可以實現?

我提到過很多答案,但是沒有運氣。

任何幫助,將不勝感激...

這是生成圖像的代碼:

UIGraphicsBeginImageContextWithOptions(aView.bounds.size, NO, 0.0);
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, 0);
[aView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

然后,我使用此圖像將其轉換為pdf文件。 但是在執行renderInContext時,我遇到了內存高峰。 然后它永遠不會降低。

我最近一直在使用renderInContext,盡管它在CPU上的負擔非常大,但對內存使用完全沒有影響。 您是否可以使用替代方法: drawViewHierarchyInRect: afterScreenUpdates:對我來說,它要快得多,所以我想它可能更有效,並且可以解決您的內存問題。

該方法將呈現到上下文,然后您可以調用:

CGImageRef image = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());

這個答案可能會幫助某人,所以我正在回答。

對於大型繪圖,我必須使用drawViewHierarchyInRect: afterScreenUpdates:但應在autoreleasepool內部執行。 如果不是,則內存持續增加。

對於較小的繪圖, renderInContext更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM