objective C block异步改同步
目前有不少系统api都用到了block,但是有时候我们就需要调用这些来实现同步接口。
幸好gcd中有dispatch_semaphore_t,我们可以先在函数体中先初始化
dispatch_semaphore_tsema=dispatch_semaphore_create(0);
调用含有block的接口后,等待信号量
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
在block中完成需要的任务之后,调用dispatch_semaphore_signal(sema);
除此之外,还有一个办法就是,将你要实现的同步接口之后的相关操作写成一个block,当成参数,例子如下:
id result = [self syncInterface];
// do somethine with result
将接口syncInterface修改为- (void) syncInterface:(void(^)(id result))resultHandler;
之前调用修改为
[self syncInterface:^(id result){ // do somethine with result }];
在syncInterface:的实现中,在block处理结束之后直接调用resultHandler。
posted on 2013-10-15 17:14 cenlei1988 阅读(677) 评论(0) 收藏 举报
浙公网安备 33010602011771号