我开始使用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.
});
});
我觉得我遗漏了一些基本的东西,我还不明白。
答案 0 :(得分:1)
将完成块添加到instanceMethod
:
[[self classInstance] instanceMethodWithCompletion:^{
// Handle finish of the instance method
}];
并像这样声明instanceMethod
:
- (void)instanceMethodWithCompletion:(void (^)(void))completion {
// Do something...
if(completion) {
completion();
}
}
它将允许instanceMethod
告知它已经完成并运行该块中的任何其他代码。