以下方法将一些图像上传到远程服务器。我希望它们彼此独立上传(并行)。是[NSOperationQueue mainQueue]是一个串行队列吗?
- (void)startUploadProcess {
for (int i = 0; i < [imageNames count]; i++) {
NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
[GlobalsFuncs uploadImageToServer:[[NSImage alloc] initWithContentsOfURL:[imagePaths objectAtIndex:i]] forSessionID:[[family SessionID] stringValue] withFilename:[imageNames objectAtIndex:i]];
}];
blockOp.completionBlock = ^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self afterUploadCompletion:i];
}];
};
[bgQueue addOperation:blockOp];
}
}
- (void)afterUploadCompletion:(NSInteger)pageNumber {
NSLog(@"%ld for sessionID : %@", (long)pageNumber, family.SessionID);
imagesUploaded++;
[progressIndicator incrementBy:progressDelta];
}
从上面的代码可以看出,我为每个图像添加了对afterUploadCompletion
方法的调用。在该方法中,我正在递增一个类实例变量的整数。我的问题是如果我的代码会导致竞争状态?基本上,我问的是,如果mainQueue
中的所有内容都是串行执行的? 另外,我怎样才能使NSOperationQueue *bgQueue
并行队列?我想要添加到此队列的块不等待以前的操作完成。
非常感谢您的帮助!
为什么不你刚刚打印,它在调试程序支持并发的OP数目。这个问题可以节省10分钟的时间。除此之外,还有一个方便的在线文档。 – Andy 2014-12-01 22:24:43