iOS   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 在主线程上调用dispatch_sync(dispatch_get_global_queue())会导致应用程序“挂起”吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

// Method called when a button is clicked - (void)handleClickEvent { dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self BACkgroundProcessing];
@H_772_10@
// 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())会导致应用程序“挂起”吗?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。