先执行Block里面的内容再执行后面的内容(Block同步执行)

未修改之前的代码

__block NSString * string = @"LJ";

[self testBlock:^{

     string = @"HR";            //语句1

}];

NSLog(@"string=%@",string); //语句2


输出的结果为   :string=LJ

代码执行顺序:语句2----》语句1

现在想让顺序变为:语句1-----》语句2

__block NSString * string = @"LJ";

//创建一个全局队列

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

//创建一个信号量(值为0

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

dispatch_async(queue, ^{

    [self testBlock:^{

        string = @"HR";

//信号量加1

        dispatch_semaphore_signal(semaphore);

    }];

    //信号量减1,如果>0,则向下执行,否则等待

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    NSLog(@"string=%@",string); //语句2

});

输出的结果为:string=HR



你可能感兴趣的:(iOS开发,信号量,block同步执行)