我有这样的代码
SomeController *controller = [[SomeController alloc] init];
[self.navController setViewControllers:@[controller] animated:YES];
如果在non-main thread
中运行此代码,则应用程序在执行上述代码的resignFirstResponder
viewController
期间崩溃
如果在dispatch_async(dispatch_get_main_queue, ^{})
;
然后它工作正常,没有崩溃
为什么它会在第一种情况中崩溃?我想如果在非主线程中运行,那么UI不会看到更改,但我没想到它会崩溃?
答案 0 :(得分:1)
应该在主线程上调用UIKit类。 Apple的UIKit documentation州:
请注意
在大多数情况下,只能从应用程序的主线程中使用UIKit类。对于从UIResponder派生的类或涉及以任何方式操纵应用程序的用户界面的类尤其如此。
因为UIKit假定它将在主线程上运行,所以如果你试图在另一个线程上访问它,将无法保证会发生什么。您的UI可能不会更新,您可能会崩溃等等。如果某些类发现您在非主线程上调用它们,则可能会发生异常。