gpt4 book ai didi

ios - 如果在 mainQueue/mainThread 之外运行,NavigationController.pushViewController 会崩溃

转载 作者:行者123 更新时间:2023-11-29 02:16:32 26 4
gpt4 key购买 nike

我有这样的代码

SomeController *controller = [[SomeController alloc] init];
[self.navController setViewControllers:@[controller] animated:YES];

如果在非主线程中运行此代码,则应用程序会在执行上述代码的viewControllerresignFirstResponder期间崩溃

如果在 dispatch_async(dispatch_get_main_queue, ^{}) 中运行这段代码;

然后它工作正常,没有崩溃

为什么在第一种情况会崩溃?我以为如果在非主线程中运行,那么 UI 将看不到更改,但我没想到它会崩溃?

最佳答案

对 UIKit 类的调用应该发生在主线程上。苹果的UIKit documentation状态:

NOTE

For the most part, use UIKit classes only from your app’s main thread. This is particularly true for classes derived from UIResponder or that involve manipulating your app’s user interface in any way.

因为 UIKit 假定它会在主线程上运行,所以无法真正保证如果您尝试在不同的线程上访问它会发生什么;您的 UI 可能不会更新,您可能会崩溃等。如果某些类发现您在非主线程上调用它们,它们甚至可能会抛出异常。

关于ios - 如果在 mainQueue/mainThread 之外运行,NavigationController.pushViewController 会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28691040/

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