UIImageView + UIImage vs CALayer + 内容效率

Posted

技术标签:

【中文标题】UIImageView + UIImage vs CALayer + 内容效率【英文标题】:UIImageView + UIImage vs CALayer + Content Efficiency 【发布时间】:2018-05-29 16:26:05 【问题描述】:

目前,我有一个UIImageView,每隔几秒左右更新一次UIImage。在非常繁重的 UI 中,这是一个没完没了的过程。

考虑到尽可能使用CALayers 而不是UIView 的重量总是更轻,我想知道我是否将UIImageView 转换为CALayer 并将UIImage 设置为CALayer 的设置内容?


当前

//Every 2 seconds
myImageView.image = UIImage(cgImage: myCGImage)

建议

//Every 2 seconds
myLayer.content = myCGImage


由于UIImageView 的行为略有不同,我想知道哪种方法对 CPU/GPU 的整体效率更高。

【问题讨论】:

我会质疑你的前提。图像视图 CALayer。渲染树由层组成。那你指的是什么区别?如果您遇到性能问题,请使用 Instruments 进行测量。如果没有,请继续。 【参考方案1】:

一般来说,UIView 对象是对CALayers 的相当薄的包装。 UIImageView 也不例外。在这两种情况下,解码和显示图像的大部分“繁重工作”都是由CALayer 完成的,所以我怀疑您是否会看到很大的不同。

UIImageView 更易于使用,生成的代码更易于阅读,所以除非你需要做一些需要你使用CALayers 的事情,否则我会坚持使用UIKit 对象。

【讨论】:

但正如 Matt 在评论中所说,如果您需要进行性能优化,请使用 Instruments 来识别瓶颈。

以上是关于UIImageView + UIImage vs CALayer + 内容效率的主要内容,如果未能解决你的问题,请参考以下文章

将 UIImage 用于 UIImageView 时 UIImage 失真

使用 UIImageView 调整 UIImage

将大 UIImage 比例下载到 UIImageView

UIImage 从 UIImageView 流出

UIImageView和UIImage

避免在我的 UIImageView 中拉伸 UIImage