为了账号安全,请及时绑定邮箱和手机立即绑定

消除UIImage图像命名:FUD

消除UIImage图像命名:FUD

呼如林 2019-08-15 15:49:47
消除UIImage图像命名:FUD请注意,这个问题可以追溯到iOS 2.0!从那时起,图像要求和处理已经发生了很大变化。Retina使图像更大,加载它们稍微复杂一些。内置支持iPad和视网膜图像,您当然应该在代码中使用ImageNamed。我看到很多人都说imageNamed不好,但同样数量的人说性能很好 - 特别是在渲染时UITableView。例如,在iPhoneDeveloperTips.com上查看此SO问题或本文UIImageimageNamed用于泄漏的方法因此最好避免,但在最近的版本中已得到修复。我想更好地理解缓存算法,以便做出合理的决定,我可以信任系统来缓存我的图像,以及我需要加倍努力并自己完成。我目前的基本理解是它是一个简单NSMutableDictionary的UIImages文件名引用。它变得越来越大,当内存耗尽时,它会变得更小。例如,有没有人确切知道后面的图像缓存imageNamed没有响应didReceiveMemoryWarning?Apple似乎不太可能不这样做。如果您对缓存算法有任何了解,请在此处发布。
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

根据我的经验,imageNamed创建的图像缓存不响应内存警告。我有两个应用程序,就像我可以得到它们一样精简到内存管理,但由于缺乏内存,仍然莫名其妙地崩溃。当我停止使用imageNamed加载图像时,两个应用程序都变得非常稳定。

我承认这两个应用程序都加载了大量的图像,但没有任何完全不同寻常的版本。在第一个应用程序中,我只是完全跳过缓存,因为用户不太可能两次回到同一图像。在第二个中,我构建了一个非常简单的缓存类,正如你所提到的那样 - 将UIImages保存在NSMutableDictionary中,然后在收到内存警告时刷新其内容。如果imageNamed:要像那样缓存,那么我不应该看到任何性能升级。所有这一切都在2.2上运行 - 我不知道是否有任何3.0的影响。

你可以在我的第一个应用程序中找到关于这个问题的另一个问题: StackOverflow关于UIImage缓存的问题

另一个注意事项 - InterfaceBuilder使用了图像命名。如果遇到这个问题,请记住一些事情。


查看完整回答
反对 回复 2019-08-15
  • 2 回答
  • 0 关注
  • 604 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信