0

我有一个玩具问题,我有两个方法调用 A 和 B。它们都进行 API 调用并且都有成功回调块。方法 A 在控制器中填充一个属性,方法 B 读取它并在方法 B 的 api 请求完成后在成功块中对其进行一些计算。现在我不能像这样执行这两个:

@property (nonatomic) NSArray *test;

[self methodA];
[self methodB];

来自 B 的回调可能发生在来自 A 和 B 的回调最终会读取一个空属性之前。我正在研究 Bolts 框架,想知道这里是否有人可以就如何使用它来实现这一点提供一些指导?本质上,我只希望 api 调用异步发生,然后 B 应该等到 A 完成。

4

1 回答 1

0

您不需要为此类任务使用外部框架,只需使用semaphore即可。GCD 提供信号量,见dispatch_semaphore_create和朋友

改编自该参考文献的第一个示例,在伪代码中您将拥有如下内容:

dispatch_semaphore_t sema;
@property (nonatomic) NSArray *test;

sema = dispatch_semaphore_create(0);
[self methodA]; 
[self methodB];

- (void) methodA
{
   ...
   // set test
   dispatch_semaphore_signal(sema);
   ...
}

- (void) methodB
{
   ...
   // prepare to read test
   dispatch_semaphore_wait(sema);
   // read test
   ...
}

高温高压

于 2016-04-14T22:45:55.550 回答