gpt4 book ai didi

iphone - img_data_lock iPhone - imageNamed 与 imageWithContentsofFile

转载 作者:行者123 更新时间:2023-12-03 19:29:06 27 4
gpt4 key购买 nike

我注意到内存激增,仪器中列出的负责调用者是 img_data_lock,负责库是 CoreGraphics

我一直在读到该问题与缓存与未缓存图像加载有关( Difference between [UIImage imageNamed...] and [UIImage imageWithData...]? ) 目前我的应用程序通过 imageNamed

加载一系列图像

imageWithContentsOfFile 替换 imageNamed 调用似乎可以解决该问题。

有人有关于 img_data_lock 调用者的任何信息吗?如果imageNamed对内存造成如此大的影响,为什么有人会使用它呢?

最佳答案

UIImage 的方法 imageNamed: 和 imageWithContentsOfFile: 做的事情略有不同。 imageNamed 将图像加载到特殊的系统缓存中,然后对该图像路径的 future 调用将返回缓存中的图像,而不是从磁盘重新加载图像。 imageWithContentsOfFile 只是在您指定的路径加载图像,但不进行缓存。对同一图像多次调用 imageWithContentsOfFile 将导致内存中产生多个副本。

当发出内存警告时,iOS 似乎不会清空缓存(我不确定是好是坏),这可能会导致应用程序因缺乏可用内存而被终止。使用 imageWithContentsOfFile 加载的 UIImage 通过清除图像并在需要时重新加载来响应内存警告,这可能解释了为什么内存峰值消失了。

此外,模拟器中的缓存似乎比实际硬件中的缓存大得多,我在使用 imageNamed 的 UIImages 中看到的问题和崩溃只发生在设备上。在模拟器上测试时要小心!

我认为使用 imageNamed 的唯一原因是同一张图像在您的 View 中使用了多次。或者,您可以实现自己的图像缓存,并获得可以控制的缓存的好处,如下所述: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

关于iphone - img_data_lock iPhone - imageNamed 与 imageWithContentsofFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907780/

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