2 u012840388 u012840388 于 2016.03.06 15:41 提问

iOS开发中,如和使等待block执行完毕后再执行下面的代码?

int a = 0;
void (^requestBlock)(NSDictionary *) = ^(int data){
a = data;//这里假设data = 1,那么a也要 = 1
};
NSLog(a);

这里的a永远是0,在有这段block的前提下,有什么办法让程序同步执行,也就是等待block执行完之后再执行下面的代码?这里只是的例子,我确实有这方面的需要。

2个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.06 18:24

自己用信号量来同步 block后面wait block函数体中最后设置信号量

u012840388
u012840388 我找过相关资料,不知道是不是我写得不对还是方法不行,你可以在我的基础上写给我吗?
2 年多之前 回复
u012979318
u012979318   2016.03.07 04:45

completionhandler + GCD试试 如果闭包写得好就不用后者了 还用一种方式用KVO机制去监视一个值 当它满足一定条件后再执行后续方法

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
1.Block内部执行完才走后续的代码 2.多次请求完成才执行代码
一.使用信号量 //先创建一个semaphore dispatch_semaphore_t semaphore = dispatch_semaphore_create(1); __block NSMutableArray *modelArr = [[NSMutableArray alloc]init]; DataBaseTool *tool = [DataB
如何等到嵌套的block执行完后再执行其他代码?
多个请求数据 并行请求 等结果全部返回后再刷新
先执行Block里面的内容再执行后面的内容(Block同步执行)
未修改之前的代码 __block NSString * string = @"LJ"; [self testBlock:^{      string = @"HR";            //语句1 }]; NSLog(@"string=%@",string); //语句2 输出的结果为   :string=LJ 代码执行顺序:语句2----》语句1
等待block完成再执行下一句代码
我使用afnetworking发送一个post请求, 需要得到请求结果再执行下一步代码,现在我用过如下两种方式, 但都会造成程序卡住无法往下进行.但是我在另一个put请求用了相同的方法却可行, 哪位大神有了解过这种问题的?求解释 第一种: dispatch_semaphore_t AFHTTPRequestOperationManager *manager = [AFHTTPReque
objective-c 等待多个异步函数完成后,再执行某段代码--GCD Group 的使用
有个 API 如下: + (void)updateByUser:(ALUser *)user completion:(void (^)(void))completion { AVQuery *query = [AVQuery queryWithClassName:@"Feed"]; query.limit = 15; [query orderByDescending:
如何等待一个线程完成后才继续执行之后的操作
   c#的Application.DoEvents()的作用      交出CPU控制权,让系统可以处理队列中的所有Windows消息,比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应,因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法
日积月累:Java等待子线程执行完毕,再执行后续逻辑
在实际开发过过程中,我们会经常遇见将一个“庞大”的任务拆分成多个子任务,各个子任务在独立的子线程中运行。待所有子线程的任务完成之后,在运行后续的业务,或者退出Main线程。代码如下:WorkThread.javapublic class WorkThread extends Thread { @Override public void run() { try {
java中 等待所有子线程结束 后再执行一段代码。
今天有一个需求是:在一个方法中开启了一个子线程来执行操作,返回值依赖于子线程的执行结果,这样如果要返回正确的值,就需要开启子线程后 主线程等待子线程,然后子线程执行结束后,主线程再继续执行。 主线程等待子线程需要用到:CountDownLatch 代码如下: import java.util.concurrent.CountDownLatch; public class Cou
iOS 等待异步线程结束再执行后续代码
今天遇到一个关于蓝牙传值方法的问题,我将蓝牙通讯模块封装到了一个工具类中,另外我定义了一个Block代码块当我从外部向蓝牙发送了一个数据的时候我要用定义的block代码块返回给外部调用者。但是外部调用者却要在block代码块外使用这个数据。例如一个Demo代码如下:#import "ViewController.h"typedef void(^SuccessBlock)(NSString *Obj)
java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)
Java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用户下单成功。 我们通过以下的几种方法来解决: 一、用sleep方法,让主线程睡眠一段时间,当然这个睡眠时间是主观的时间,是我们自己定的,这个方法不推荐,但是在这里还是写一下,毕竟是解决方法