ios - 从后台线程执行 UI 更新,可能的陷阱

标签 ios multithreading user-interface

我知道强烈建议仅在主线程中更新 UI。否则可能会导致意外崩溃。

但是我尝试使用这两种方式,但还没有遇到任何问题。也许我的场景足够简单,问题只出现在复杂的代码中,但我想更深入地了解这个问题。并尝试找出忽略此规则导致 100% 程序中止或其他一些严重问题(死锁、竞争条件等)的情况。

也许你们中的一些人曾经面对过这个“敌人”,或者还记得你们实践中的具体例子。 将非常感谢代码(或伪代码)中可能的说明。

谢谢

最佳答案

整个 UIKit 过去都是线程不安全的,因此从后台线程调用几乎任何东西都会崩溃,几乎总是这样。现在情况好多了,但是有了 GCD,无论如何在主线程上更新 UI 都非常简单。当前的模式是这样的:

[someWorker runBackgroundOperationAndCall:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        // update UI
    });
}];

这太简单了,我想这真的不值得再考虑一下。当我忘记从主线程更新 UI 时,它有时有效,有时无效 - UI 没有立即更新,出现奇怪的闪烁或类似的东西。使用线程时,以官方认可的正确方式做事是个好主意,否则您会在最意想不到的时候进入痛苦的世界。

(抱歉,我没有一个简短的片段来演示从后台线程更新 UI 时出现的问题。)

关于ios - 从后台线程执行 UI 更新,可能的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457180/

相关文章:

java - 当主线程仍在运行时,线程如何通知主线程

iphone - 原子属性在什么情况下有用?

java - 运行同步方法时 GUI 不起作用

Eclipse 在 Ubuntu 9.10 上表现异常。升级后我的按钮将无法使用!

用于测量图像相似度的 iOS 库

iphone - IBAction 在第二个 View Controller 中设置 UIImageview 图像?

ios - 编辑自定义 UITextField 后应用程序卡住

c++ - 并行计算内存访问瓶颈

html - html页面中的无框文本字段

ios - 对象在初始化后立即释放