我有一些代码显示一个复选标记作为自定义子类UITableViewCell的辅助视图。目前,我正在通过为我的自定义子类创建一个方法来实现它,当调用时,从新的UIImage中分配一个新的UIImageView,而UIImage又从4K .png文件加载。还有另一种自定义方法可以删除视图并在我希望复选标记消失时取消分配。
显然这不是实现这一点的最有效方法,因为每次我想要改变状态时我都必须分配并初始化一个新的UIImage +关联对象。话虽如此,代码现在可以正常工作,而且我不确定是否真的值得将其更改为更高效的实现。打开或关闭复选框是一个UI的事情,所以它永远不会比人类可以在他们的iOS设备上按下屏幕更快地发生,并且它正在加载的图像就像我说的那样,4K .png。所以,虽然我知道我是以一种非常低效的方式做到这一点,它是否足够低效,值得改变? (我没有注意到会影响用户体验的任何缓慢,尽管应用还没有完全构建)。
答案 0 :(得分:3)
表面上的观察是,如果用户体验不受影响,那么你所拥有的肯定是足够有效的。总是要避免过早优化。
话虽如此,[UImage +imageNamed:]
有一个内部缓存。多次调用它通常会返回相同的UIImage对象,完全有助于像你这样的情况。如果可能,请使用该方法获取UIImages。
UIImage
也是懒惰的负载。创建一个链接到特定文件相对便宜,因为加载和解码文件的工作不会在有人真正尝试绘制文件之前完成。这使得很难提出一个关于速度的经验概念,因为你订购的工作直到将来难以预测的时间才会发生。
所以很难给出一个确切的答案,而且不太可能是一个问题,但如果你坚持+imageNamed
那么你至少可以确保操作系统正在尽其所能帮助你。
答案 1 :(得分:1)
如果您没有看到任何性能问题,我会离开它。如果操作系统或文件系统在第一次读取后已经缓存了文件,那就不会让我感到惊讶。