objective-c – 在主线程上调用dispatch_sync(dispatch_get_global_queue())会导致应用程序“挂起”吗?

objective-c – 在主线程上调用dispatch_sync(dispatch_get_global_queue())会导致应用程序“挂起”吗?,第1张

概述// Method called when a button is clicked- (void)handleClickEvent { dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self backgroundProcessing];
// 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,当作业完成后,它会将块发布回主队列以更新视图. 总结

以上是内存溢出为你收集整理的objective-c – 在主线程上调用dispatch_sync(dispatch_get_global_queue())会导致应用程序“挂起”吗?全部内容,希望文章能够帮你解决objective-c – 在主线程上调用dispatch_sync(dispatch_get_global_queue())会导致应用程序“挂起”吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1014714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存