经常碰到这种情况,请求一些比较耗时的操作,需要用block,等block内部执行完,再开始根据block获取的数据,执行其他步骤,这时就需要用多线程的顺序执行。
dispatch_group_t grp = dispatch_group_create(); //创建多线程组
dispatch_group_async(grp, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_t semp = dispatch_semaphore_create(0); //创建信号量
myBlock = ^{ //自己的block函数
dispatch_semaphore_signal(semp); //执行完通知标识
}
dispatch_semaphore_wait(semp, DISPATCH_TIME_FOREVER);// 在请求成功之前等待信号量(-1)
});
dispatch_group_notify(grp, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
function()//执行接下来的函数
});