renderInContext消耗大量内存并最终崩溃

时间:2014-12-17 12:16:10

标签: ios objective-c uiview

我的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时,我得到了内存峰值。然后它永远不会降低。

2 个答案:

答案 0 :(得分:0)

我最近一直在使用renderInContext,虽然它在CPU上非常沉重,但我认为对内存使用没有任何影响。您是否能够使用替代方案:drawViewHierarchyInRect: afterScreenUpdates:这对我来说要快得多,所以我想它也可能更有效率并帮助解决您的记忆问题。

该方法呈现到上下文然后您可以调用:

CGImageRef image = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());

答案 1 :(得分:0)

这个答案可能对某些人有所帮助,所以我会回答这个问题。

对于大型绘图,我必须使用drawViewHierarchyInRect: afterScreenUpdates:,但它应该在autoreleasepool内执行。如果没有,记忆会继续上升。

对于较小的绘图renderInContext更好。