objective-c – 在主线程上调用dispatch_sync(dispatch_get_glob
发布时间:2020-12-14 17:41:13 所属栏目:百科 来源:网络整理
导读:// Method called when a button is clicked- (void)handleClickEvent { dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{ [self backgroundProcessing]; }); // Some code to update the UI of the view .... [self updateU
// Method called when a button is clicked - (void)handleClickEvent { dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{ [self backgroundProcessing]; }); // Some code to update the UI of the view .... [self updateUI]; .... } 1)当按下视图上的按钮时,在主线程上调用handleClickEvent. 2)我使用了dispatch_sync(),因为在计算backgroundProcessing方法中的变量之前,无法完成以下更新视图UI的代码. 3)我使用dispatch_get_global_queue以使backgroundProcessing脱离主线程. (遵循规则:通常将后台处理放在主线程上,并且通常将影响UI的代码放在主线程上). 我的问题是:backgroundProcessing方法是否“挂起”主线程,直到它完成,因为我使用dispatch_sync? 编辑: - (void)handleClickEvent { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,^{ [self backgroundProcessing]; dispatch_async(dispatch_get_main_queue(),^{ [self updateUI]; }); }); } 来自此链接的解决方案:Completion Callbaks 解决方法
是的,dispatch_sync将阻塞,直到任务完成.使用dispatch_async,当作业完成后,它会将块发布回主队列以更新视图.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |