方法在不同的线程中运行。

时间:2014-03-28 18:19:03

标签: ios objective-c

我开始使用iOS和Objective C编程,遇到了我的代码没有同步执行的问题。

以下代码位于我的ViewController.m文件中。

[[self classInstance] instanceMethod];
//more code here executes at the same time as instanceMethod

我之后的instanceMethod和代码同时执行,但代码依赖于instanceMethod运行。最初我尝试将它放在一个单独的线程中,然后在完成后运行代码,但似乎无论instanceMethod从未等待过。

我能够让它发挥作用的唯一方法是:

[[self classInstance] instanceMethod];
while(self.classInstance.instanceVariable == nil){
  // wait for other code to fill the variables I need 
  // do nothing
}
// execute remaining code

我在下面试过,但它没有按预期工作。

dispatch_async(backgroundQueue, ^{
    [[self classInstance] instanceMethod]; 

    dispatch_async(dispatch_get_main_queue(), ^{
        //other code here for once instanceMethod is completed.
    });    
});

我觉得我遗漏了一些基本的东西,我还不明白。

1 个答案:

答案 0 :(得分:1)

将完成块添加到instanceMethod

是一个很好的解决方案
[[self classInstance] instanceMethodWithCompletion:^{
    // Handle finish of the instance method
}];

并像这样声明instanceMethod

- (void)instanceMethodWithCompletion:(void (^)(void))completion {
    // Do something...

    if(completion) {
        completion();
    }
}

它将允许instanceMethod告知它已经完成并运行该块中的任何其他代码。