iOS开发-block异步实现return

模拟block异步:

- (NSString *)blockReturn {
    __block NSString *str = @"sst";
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       str = @"SunSatan";
    });
    return str;
}

此时返回的str = @"sst",原理大家都懂,问题是怎么实现异步return正确值。

最简单方便的方法就是使用信号量,初始化信号量为0,等待异步执行完毕再增加信号量:

- (NSString *)blockReturn {
    //创建信号量
    dispatch_semaphore_t signal = dispatch_semaphore_create(0);
    __block NSString *str = @"sst";
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        str = @"SunSatan";
        //信号量+1
        dispatch_semaphore_signal(signal);
    });
    //信号量等待
    dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
    return str;
}

iOS开发-dispatch_semaphore(信号量)

猜你喜欢

转载自blog.csdn.net/qq_36557133/article/details/103204063