已解决
我必须处理100张2400x2000像素的图像。我在后台线程中循环执行。但是在第60-70幅图像上,渲染的结果是黑白图像...并记录以下消息:
“ Application(2227,0x16c0db000)malloc:无法分配区域 *** mach_vm_map(size = 15777792)失败(错误代码= 3)“
这是我周期性地做的事情
UIGraphicsBeginImageContextWithOptions(PageSize.PX.size, true, 1)
let context = UIGraphicsGetCurrentContext()
UIColor.white.setFill()
context?.fill(CGRect(x: 0, y: 0, width: PageSize.PX.size.width, height: PageSize.PX.size.height))
image?.draw(in: newImageRect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
同时处理50张图像-一切正常。 同样,每个循环都添加到自动释放池中。
我已经尝试过UIGraphicsImageRenderer。它的运行速度比通过图片上下文慢,并且在第50-60张图片之后,它们的大小为0x0 px。...
我该如何解决?我可以以某种方式清理图像缓存吗?或者,也许我可以增加图像处理缓存?或者.... ???
答案 0 :(得分:0)
花费5天,每次2-3小时进行调试。如果遇到此类问题,希望这篇文章对您有所帮助。
这是一种非常奇怪的情况,并且此错误仅在beta iOS 12中出现。在iOS 11中,一切正常。
是什么情况?在我的应用程序中,我需要从图库中重绘100张图像,并且当我与UIGraphicsBeginImageContextWithOptions一起调用UIImageJPEGRepresentation时,我认为某些图像处理器缓存溢出(在第50至第60张图像上-结果为0x0大小或黑色图像。这取决于我使用的技术) 。还请注意,我在每个循环中都添加了autorelesePool {},并且在处理图像时我的内存消耗不大于200 Mb。此外,我尝试使用仪器进行调试,但未发现任何泄漏等。>
我通过运行每个图像操作链以0.1秒的延迟来实现了。我认为这不是一个好方法,但是在处理100张图像时,处理时间从25秒增加到35秒。效果很好。
我希望在稳定的iOS 12中不会发生这种情况。
快乐的编码专家。