我正面临着一些奇怪的结果addOperationWithBlock
。
我的函数看起来像这样:
-(void) myFunction{
NSLog(@"VISITED");
..
for (NSDictionary *Obj in myObjects)
{
[operationQueue addOperationWithBlock:^(void){
MyObject* tmp = [self tediousFunction:Obj];
// threadTempObjects is member NSMutableArray
[self.threadTempObjects addObject:tmp];
NSLog(@"ADDED");
}];
}
[operationQueue addOperationWithBlock:^(void){
[self.myArray addObjectsFromArray:self.threadTempObjects];
for(myObject *myObj in self.myArray)
{
// MAIN_QUEUE
[[NSOperationQueue mainQueue] addOperationWithBlock:^(void) {
[self updateUI:myObj];
}];
}
}];
[operationQueue addOperationWithBlock:^(void){
[[NSOperationQueue mainQueue] addOperationWithBlock:^(void) {
[self filterResults];
}];
}];
}
我的字典包含 4 个值,因此 ADDED 在日志中显示 4 次。 但是,当我检查filterResults内部时,我发现myArray内部只有2 个对象。这意味着在调用 filterResults 操作之前调用了 4 次 operationQueue 并没有结束(尽管它是后来添加的!)
我认为 operationQueue 是串行的,并且我可以依靠它,当我添加一个操作时,它将在最后一个操作之后立即添加。所以奇怪的是,在之后的数组中只有 2 个操作。我错过了什么?谢谢