我创建了一个NSOperation
目标是从 20 个 URL 下载一些图像(如 20 个)。所以在这个里面NSOperation
我创建了 20 个AFImageRequestOperation
添加它们并在队列中NSOperationQueue
调用。-waitUntilAllOperationsAreFinished
问题是,它不会等待,它会立即返回。这是代码
- (void)main {
NSArray *array = [I have the 20 links stored in this array];
self.queue = [[NSOperationQueue alloc]init];
self.queue.maxConcurrentOperationCount = 1;
for (int i = 0; i < array.count; i++) {
NSURL *url = [NSURL URLWithString:[array objectAtIndex:i]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFImageRequestOperation *op = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) {
return image;
} success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// SUCCESS BLOCK (not relevant)
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
// FAILURE BLOCK (not relevant)
}];
[self.queue addOperation:op];
}
[self.queue waitUntilAllOperationsAreFinished]; // Here is the problem it doesn't wait
DDLogWarn(@"-- %@ FINISHED --", self);
}
在控制台中,DDLogWarn(@"-- %@ FINISHED --", self);
每个操作甚至开始之前的打印,所以我的猜测是waitUntilAllOperationsAreFinished
没有完成它的工作并且没有等待,但是之后 20 个操作仍在运行,这可能意味着main
还没有返回,所以我不知道该怎么想了。
编辑1:实际上我想知道,如果我的DDLog
内部成功和失败阻塞,因为waitUntilAllOperationsAreFinished
阻塞线程直到所有操作完成。这可以解释为什么我没有看到任何事情发生并且一切都突然发生。