[英]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.