我的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时,我得到了内存峰值。然后它永远不会降低。
答案 0 :(得分:0)
我最近一直在使用renderInContext,虽然它在CPU上非常沉重,但我认为对内存使用没有任何影响。您是否能够使用替代方案:drawViewHierarchyInRect: afterScreenUpdates:
这对我来说要快得多,所以我想它也可能更有效率并帮助解决您的记忆问题。
该方法呈现到上下文然后您可以调用:
CGImageRef image = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());
答案 1 :(得分:0)
这个答案可能对某些人有所帮助,所以我会回答这个问题。
对于大型绘图,我必须使用drawViewHierarchyInRect: afterScreenUpdates:
,但它应该在autoreleasepool
内执行。如果没有,记忆会继续上升。
对于较小的绘图renderInContext
更好。