gpt4 book ai didi

ios - 从后台线程调用 UIKit 时发出警告

转载 作者:可可西里 更新时间:2023-11-01 03:15:06 25 4
gpt4 key购买 nike

iOS 的 UIKit 不是线程安全的,让我们称之为众所周知的事实。我知道规则,我很小心,但我仍然会被咬 - 时不时地,由此产生的崩溃足以从对 UIKit 的违规后台调用中移除,从而使跟踪问题变得不那么愉快。

这个问题看起来很容易解决——让 UIKit 类/方法在从后台线程调用时发出警告,至少作为调试功能。据我所知,iOS 不提供任何此类功能。当然,可以通过在此类调用之前使用某种形式的断言来手动实现相同的效果,但这种解决方案并不是最优雅的,而且还存在与原始问题相同的弱点,即程序员容易健忘。

有没有人有更优雅的解决方案?您在项目中是如何处理这个问题的?

(注意:this question 是相关的,但不是很明确。有人想知道)


更新:安德鲁的回答是我当时正在寻找的解决方案,但请注意,至少从 Xcode 9 开始,它现在由 xcode/ios 提供。例如,添加此代码:

DispatchQueue.global().async {
print(self.view.frame)
}

UIView 的 viewDidLoad 方法会在 Xcode 中生成运行时警告内联 UIView.frame 必须仅在主线程中使用 并向控制台打印一条消息:Main Thread Checker: UI API在后台线程上调用:-[UIView frame]

最佳答案

此代码(只需添加到项目并在没有 ARC 的情况下编译此文件)导致在主线程之外访问 UIKit 断言:https://gist.github.com/steipete/5664345

我刚刚用它来解决我刚刚获取的一些代码中的许多 UIKit/主线程问题。

关于ios - 从后台线程调用 UIKit 时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com