2
回答
block是多线程的吗
华为云4核8G,高性能云服务器,免费试用   


以下式我的代码大致结构

__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

iOS
举报
linqir
发帖于5年前 2回/2K+阅
共有2个答案 最后回答: 5年前

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

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

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

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

顶部