1、block直接使用
[self methodWithABlock:^(id result){
//写block中需要做的事情
}];
2、block与GCD的信号量结合使用
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[self methodWithABlock:^(id result){
//写block中需要做的事情
//结束等待
dispatch_semaphore_signal(sem);
}];
//等待信号
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
3、block与GCD异步
// 以下两行将任务排程到一个后台线程执行。dispatch_get_global_queue会取得一个系统分配的后台任务队列。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[self methodWithBlock:^(id result){
//写block中需要做的事情
//......
//通知信号结束
dispatch_semaphore_signal(sem);
]
//等待结束信号
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
dispatch_async(dispatch_get_main_queue(), ^{
//主线程执行
});
});