共享全局属性的两个异步任务

时间:2016-04-14 20:46:18

标签: objective-c bolts-framework

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

@property (nonatomic) NSArray *test;

[self methodA];
[self methodB];

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

1 个答案:

答案 0 :(得分:0)

您不需要使用外部框架来执行此类任务,只需使用semaphore即可。 GCD提供信号量,请参阅dispatch_semaphore_create and friends

使用伪代码调整该引用的第一个示例,您将拥有类似的内容:

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
   ...
}

HTH