以下式我的代码大致结构
__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
block没有多线程单线程之分,它就是一个代码块,把当前的程序状态保存起来。方便过后执行。
如果你是在异步的回调里执行的block,那block就有可能是在回调的线程里执行。就是说,造成多线程的不是block本身,而是你调用block的那个方法。
具体到你这个问题,只能把NSLog(@"bbbbbbbbbb");加到block里,或者用别的回调方法来向下执行。
如果我没理解错的话,这段代码是在向用户请求日历的读写权限。那么,在用户没有点击弹框中的任何一个按钮之前,block都是不会执行的,你也就不可能拿到你期望的isSuccess的结果。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。