开发者社区> 问答> 正文

block是多线程的吗

以下式我的代码大致结构

__block BOOL isSuccess = NO;

EKEventStore *eventDB = [[EKEventStore alloc] init];

[eventDB requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

        ......................... 

    isSuccess = YES; 

NSLog(@"aaaaaaaa"); 

}

NSLog(@"bbbbbbbbbb");

return isSuccess;

调试的时候发现总是先打印出bbbbbbbb再打印出aaaaaaaa

难道block代码是多线程的,但是我在block之前家lock结果还是一样啊。各位大神,求解答,怎么才能先打印出aaaaaaaa再打印bbbbbbbb

展开
收起
杨冬芳 2016-06-30 19:04:21 2137 0
1 条回答
写回答
取消 提交回答
  • IT从业

    block没有多线程单线程之分,它就是一个代码块,把当前的程序状态保存起来。方便过后执行。

    如果你是在异步的回调里执行的block,那block就有可能是在回调的线程里执行。就是说,造成多线程的不是block本身,而是你调用block的那个方法。

    具体到你这个问题,只能把NSLog(@"bbbbbbbbbb");加到block里,或者用别的回调方法来向下执行。

    如果我没理解错的话,这段代码是在向用户请求日历的读写权限。那么,在用户没有点击弹框中的任何一个按钮之前,block都是不会执行的,你也就不可能拿到你期望的isSuccess的结果。

    2019-07-17 19:49:41
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载