我们不能创建一个不同的线程并启动一个运行循环来监听触摸事件或与 UI 相关的任何事情吗?是否有任何研究在多线程环境中处理 UI 任务?
问问题
79 次
1 回答
3
UIKit 不是内部线程安全的。
我觉得我应该进一步解释,但这确实是全部答案。在苹果之外没有这方面的研究,因为只有苹果维护了 UIKit。他们不太可能大规模重写 UIKit 以使其成为线程安全的,更不用说他们这样做会带来显着的性能损失。除非文档中另有明确说明,否则您必须在主线程上完成所有 UI 事件和主上下文绘制工作。
也许值得更进一步:多线程 UI 的价值非常有限。每个像素一次只能显示一件事。电容式触摸传感器一次只能发送一个信号。只有一个用户界面。并发和/或并行的承诺是我可以更好地同时推理问题,或者我可以更好地利用并行硬件。我实际上不能同时画两件东西。只有一个屏幕。最终我在画一件事。一堆曲线,归根结底,仍然是一张“图片”。它被合成并绘制为一个单一的东西。这与计算工作相反。我其实可以同时计算两条贝塞尔曲线,完全并行,并更多地利用硬件。这是我今天可以在其他线程上做的事情。
这并不是说 UIKit 内部没有并行性。软件和硬件都有。但是,承担为 UI 处理提供可重入 API 的高复杂性和性能开销并没有什么重大价值。此外,UI 是您可以拥有的最有状态的东西,而可变状态是多线程代码的死敌。尽管 UI 代码很有价值,但要使其可重入和线程安全尤其具有挑战性。正如您所指出的,这在许多平台上或多或少都是正确的。
于 2016-07-25T03:13:37.117 回答