ios - - 必須僅從主線程調用




multithreading cocoa-touch (2)

這個警告導致一個嚴重的問題,因為我真的無法使用Xcode 9 beta 2在主線程之外調用委託。奇怪的是,當我使用Xcode 8.3.3時,這是有效的。

另外我認為只從主線程調用委託只是好習慣,不是嗎? 那麼為什麼這會導致應用程序崩潰呢?


只需從主線程中調用它即可。

dispatch_async(dispatch_get_main_queue(), ^{
  [[UIApplication delegate] fooBar];
});

像這樣與您的應用代表聯繫,暗示您的架構可以使用一點清理。

您可以從任何您想要的線程調用代理。 你只需要確保你在UIKit調用的主線程上。 或者您正在使用CoreData對象所期望的正確線程。 這完全取決於您的對象具有的API合約。


在Swift中,您還可以使用 DispatchQueue.main.async 從主線程調用UI控制方法

DispatchQueue.main.async {
    YourUIControlMethod()
}




uiapplication