使 iOS 块同步执行 [英] Make iOS blocks execute synchronously

查看:12
本文介绍了使 iOS 块同步执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何让一个block同步执行,或者让函数在return语句之前等待handler,这样数据才能从block传回来?

How can I make a block execute synchronously, or make the function wait for the handler before the return statement, so the data can be passed back from the block?

-(id)performRequest:(id)args
{
__block NSData *data = nil;   

    [xyzclass requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
        data = [NSData dataWithData:responseData];
    }];

    return data;
}

推荐答案

在这种情况下你可以使用信号量.

You can use semaphores in this case.

-(id)performRequest:(id)args
{
    __block NSData *data = nil;   
     dispatch_semaphore_t sem = dispatch_semaphore_create(0);
     [xyzclass requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
       data = [NSData dataWithData:responseData];
       dispatch_semaphore_signal(sem);
     }];
    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    return data;
}

信号量将阻止进一步语句的执行,直到收到信号,这将确保您的函数不会过早返回.

semaphore will block execution of further statements until signal is received, this will make sure that your function does not return prematurely.

这篇关于使 iOS 块同步执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆