2019-05-31

2019-05-31  本文已影响0人  月沉眠love

利用GCD改变Block执行顺序

未修改之前的代码

__block NSString * string = @"normal_String";

    [selfmyBlock:^{

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

    }];

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

输出的结果为 :string=normal_String

需求:代码执行顺序:语句2->语句1 现在想让顺序变为:语句1->语句2

修改后的代码

__block NSString * string = @"normal_String";

//创建一个全局队列

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

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

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

dispatch_async(queue, ^{

    [self myBlock:^{

        string = @"block_String";

//信号量加1

        dispatch_semaphore_signal(semaphore);

    }];

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

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

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

});

输出的结果为:string=block_String

上一篇 下一篇

猜你喜欢

热点阅读