我知道强烈建议仅在主线程中更新 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/