gpt4 book ai didi

swift - 缓存溢出的图像处理

转载 作者:行者123 更新时间:2023-11-30 11:17:03 26 4
gpt4 key购买 nike

已解决

我必须处理 100 张 2400x2000 像素的图像。我在后台线程中循环执行此操作。但在第 60 - 70 个图像上,渲染结果是黑色或白色图像......并且要记录消息:

“应用程序(2227,0x16c0db000)malloc:无法分配区域*** mach_vm_map(size=15777792) 失败(错误代码=3)"

Example of bad image generation after overflow?

这是我在循环中所做的

        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....

我该如何解决这个问题?我可以以某种方式清理图像缓存吗?或者也许我可以增加图像处理缓存?或者……???

最佳答案

花费 5 天,每次 2-3 小时进行调试。如果您遇到此类问题,希望这篇文章能够对您有所帮助。

这是非常奇怪的情况,这个错误仅出现在 iOS 12 测试版中。在 iOS 11 中一切正常。

到底是怎么回事?在我的应用程序中,我需要从图库中重绘 100 张图像,当我与 UIGraphicsBeginImageContextWithOptions 配对调用 UIImageJPEGRepresentation 时,我认为某些图像处理器缓存溢出(在第 50-60 张图像上 - 结果是 0x0 大小或黑色图像。这取决于我使用的技术) 。另请注意,我在每个循环中添加了 autorelesePool {},并且在处理图像时我的内存消耗不大于 200 Mb...此外,我尝试使用仪器进行调试,但没有发现任何泄漏等。

我通过以 0.1 秒延迟异步运行每个图像操作链来解决这个问题。我认为这不是一个好方法,但在 100 张图像上,它的处理时间从 25 秒增加到 35 秒。而且效果很好。

我希望在稳定的 iOS 12 中不会发生这种情况。

祝大家编码愉快。

关于swift - 缓存溢出的图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51645950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com