我知道这个类似的问题已被提出但我的问题甚至是使用NSOperationQueue和
NSOperationQueue *aQueue = [[NSOperationQueue alloc] init];
[aQueue setMaxConcurrentOperationCount:1];
然后甚至方法也不按顺序执行,即FIFO。
MethodA(花费5秒) - > MethodB(花费2秒) - > MethodC(需要1秒钟)。
如果我把它们放入NSOperationQueue,即
[aQueue addOperationWithBlock:^{
[self MethodA];
}];
[aQueue addOperationWithBlock:^{
[self MethodB];
}];
[aQueue addOperationWithBlock:^{
[self MethodC];
}];
MethodC首先执行,然后执行A,然后执行B
我希望他们按顺序执行。 MethodA-> MethodB-> Methodc
答案 0 :(得分:2)
接收器不会被认为准备执行直到所有接收器 依赖操作已完成执行。 Source
似乎cfisher所说的依赖关系是倒退的。相反,这些是依赖关系:
总而言之,C在B执行之前无法启动,并且由于B在A执行之前无法启动,所以A必须首先执行,然后执行B,然后运行C.
如果你有相互依赖的代码片段,另一种选择是使用块并异步执行代码。
[self methodAWithCompletion:^{
[self methodBWithCompletion:^{
[self methodCWithCompletion:nil];
}];
}];
//sample method A
- (void) methodAWithCompletion:(void(^)(void)completion {
//your code
if (completion) {
completion();
}
}
答案 1 :(得分:1)
一个选项确实会使用依赖关系,因为Fonix说:MethodA依赖于依赖于MethodC的MethodB。
只需使用dependencies
中的NSOperations
属性(NSOperation
数组)或方法addDependency:
。
但是,由于您已经在使用块,为什么不使用GCD
:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self methodA];
[self methodB];
[self methodC];
});
答案 2 :(得分:0)
我认为您需要为您的NSOperations添加依赖项,我不是太过于了解它,而是它在documentation here
中