iOS*_*com 4 xcode objective-c grand-central-dispatch ios objective-c-blocks
// 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];
....
}
Run Code Online (Sandbox Code Playgroud)
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, 0), ^{
[self backgroundProcessing];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUI];
});
});
}
Run Code Online (Sandbox Code Playgroud)
来自此链接的解决方案:完成Callbaks
归档时间: |
|
查看次数: |
6816 次 |
最近记录: |