Objective-C 大师,
我一直在使用以下宏来确保一个块在主线程上运行。这个想法很简单:如果我当前在主线程上,那么我将立即运行该块。如果当前线程不是主线程,那么我将要在主线程上异步运行的块排队(这样它就不会阻塞当前线程)。
你觉得这有什么问题吗?这里有什么不安全的,或者导致我不知道的错误吗?有没有更好的方法来做到这一点?
#define run_on_main(blk) if ([NSThread isMainThread]) { blk(); } else { dispatch_async(dispatch_get_main_queue(), blk); }
示例用法:
-(BOOL)loginCompletedSuccessfully
{
NSLog(@"loginCompletedSuccessfully");
// This may be called from a network thread, so let's
// ensure the rest of this is running on the main thread.
run_on_main(^{
if (_appStartupType == AppLaunch) {
self.storyboard = [UIStoryboard storyboardWithName:DEVICED(@"XPCStoryboard") bundle:nil];
self.navigationController = [storyboard instantiateInitialViewController];
}
[self.window setRootViewController:self.navigationController];
});
return YES;
}