利用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
网友评论