美文网首页
2019-05-31

2019-05-31

作者: 月沉眠love | 来源:发表于2019-05-31 10:19 被阅读0次

    利用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

    相关文章

      网友评论

          本文标题:2019-05-31

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