美文网首页
如何先执行block中的代码后在执行下面的代码

如何先执行block中的代码后在执行下面的代码

作者: 谁能叫我布朗 | 来源:发表于2018-04-16 10:54 被阅读16次

一.问题

-(CLPlacemark*)getStartplacemark

     {

         __block CLPlacemark* start;

         [ self.geoCoder geocodeAddressString:_SourceText.text completionHandler:^(NSArray*placemarks, NSError*error) {

             CLPlacemark *startPlaceMark=[placemarks firstObject];

             start=startPlaceMark;

                      }];

         NSLog(@"%@",start);//这里打印出的是一个 null,是因为 block 是异步的,所以会先走下面的 return,

         returnstart;

}

二.解决方法

- (CLPlacemark*)getStartplacemark

{

//先创建一个semaphore

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);

    __block CLPlacemark* start;

    [self.geoCoder geocodeAddressString:_SourceText.text completionHandler:^(NSArray *placemarks, NSError *error) {      

      CLPlacemark *startPlaceMark = [placemarks firstObject];

        start = startPlaceMark;

       //发出已完成的信号

        dispatch_semaphore_signal(semaphore);

    }];

    //等待执行,不会占用资源

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    return start;

}

相关文章

  • 如何先执行block中的代码后在执行下面的代码

    一.问题 -(CLPlacemark*)getStartplacemark { __block CLPlacema...

  • iOS Block的变量捕获机制

    block的变量捕获机制 先看几段代码: 执行下面的代码会输出什么? 会输出 a = 10, b = 20 执行下...

  • [es6]async/await

    遇到await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,继续执行aw...

  • Js try catch

    在try里面发生错误,不会执行错误后try里面的代码 try里面代码出错,会执行catch里面的代码,try代码没...

  • 浅谈Swift中guard、defer、where

    defer:所声明的 block 会在当前代码执行退出后被调用,如果有多个 defer, 那么后加入的先执行 gu...

  • iOS 底层学习10 -- Block学习第一天

    block写出来默认是不会执行的!block就是将,将来想要执行的代码封装起来,然后在恰当的时候在去执行这个代码。...

  • js随笔

    forEach 中不能有异步代码 否则会直接跳过异步, 先执行后续代码在执行循环内的异步代码块查阅资料后发现大概是...

  • try-catch-finally

    (1)try中代码存在异常,先执行try中异常行之前的代码,再执行catch中代码,最后执行finally中代码。...

  • 异步编程

    同步与异步 同步:按代码顺序依次执行 异步:先执行同步代码,完成后再执行异步代码 事件循环与消息队列:当代码执行到...

  • Mac下安装MySQL-python-1.2.5问题

    在Mac下,使用Python2.7操作MySQL需要导入MySQLdb,在代码中执行以下代码 如果执行后的输出结果...

网友评论

      本文标题:如何先执行block中的代码后在执行下面的代码

      本文链接:https://www.haomeiwen.com/subject/hivskftx.html