Я создал свой собственный подкласс NSOperation и теперь хочу, чтобы некоторые его экземпляры работали параллельно. Поскольку это параллельная операция, я перезаписал
- (void)start {
[self willChangeValueForKey:@"isExecuting"];
isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
error=NO;
startedSection=NO;
// start the task
[task launch];
}
- (BOOL)isConcurrent {
return YES;
}
- (BOOL)isExecuting {
return isExecuting;
}
- (BOOL)isFinished {
return isFinished;
}
и следующий код выполняется, когда операция завершается:
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
isExecuting = NO;
isFinished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
Когда я добавляю [myQueue waitUntillAllOperationsAreFinished]
после добавления операций в myQueue
, ни одна из операций даже не запускается! Когда я удаляю [myQueue waitUntillAllOperationsAreFinished]
, я получаю то, что хочу, за исключением того, что это может привести к некоторым ошибкам из-за вмешательства основного потока в эти операции...