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)    收藏  举报

导航