如何解决这个问题?
采用如下写法,用信号量解决
dispatch_semaphore_t sema =dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER);
原理:
先设置一个信号量,信号量为0;
执行block
当前线程调用完block,没有执行到block里面之前,都等待(wait在信号量为0的时候只会等待,在信号量>0的时候才会减一继续执行)
block执行完毕,最后执行signal,将信号量+1
wait到信号量>0,将信号量减一退出,继续执行下面的逻辑
作者:CZ_2015
来源:CSDN
原文:https://blog.csdn.net/u013370834/article/details/53301604
版权声明:本文为博主原创文章,转载请附上博文链接!
网友评论