UIImageView setHighlightedImage:它必须在主线程上吗?

Posted

技术标签:

【中文标题】UIImageView setHighlightedImage:它必须在主线程上吗?【英文标题】:UIImageView setHighlightedImage: does it have to be on main thread? 【发布时间】:2017-02-03 22:22:16 【问题描述】:

我正在努力提高向用户显示的图像的性能。我已经删除了 alpha 混合,并且已经为 UIImageView 分配了一个缩放/正确大小的图像以及一些缓存。但是,作为其中的一部分,我正在考虑将 setHiglightedImage: 调用移动到后台线程。

ImageView 封装在 UIKit 中,它表示对布局的任何修改都应该在主线程上完成。但是,在使用 highlightImage 分配图像时,我们不会触发任何布局更改或调用任何约束。这会是不违反 UIKit 规则的有效更改吗?是否会因此而引发任何异常?

到目前为止,在后台线程上运行此程序时,调试器没有看到任何问题或警告。此外,围绕 UIImageView 的苹果官方文档(here 和 here)也没有指定任何关于这在后台线程上的信息。我尝试在网上搜索更多关于这样做的信息,但找不到任何有用的东西

是否有任何理由 [UIImageView setHighlightedImage:] 不在后台线程上? 它有什么性能优势吗?

【问题讨论】:

【参考方案1】:

setHighlightedImage 正在改变用户界面。您不能在后台线程上运行它。

在 Cocoa 应用程序中,主线程运行用户界面,即 也就是说,所有绘图和所有事件都在主线程上处理。如果你的 应用程序对其执行任何冗长的同步操作 线程,您的用户界面可能会变得无响应并触发 旋转光标。为避免这种情况,您应该缩短时间 被这些操作消耗,推迟它们的执行,或者将它们移动到 辅助线程。

Apple Documentation

【讨论】:

以上是关于UIImageView setHighlightedImage:它必须在主线程上吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?

在 UITableViewCell 的 setSelected 和 setHighlighted 方法中创建自定义附件视图会导致我的其余代码被忽略

我已经在我的自定义 UITableViewCell 类中覆盖了 setHighlight。但是,我并不总是想使用它。我怎样才能防止它被使用?

手指按下tableCell的时候,怎么改变cell的背景色

背景强光

TextView 高亮字体局部点击