以下方法將一些圖像上傳到遠程服務器。我希望它們彼此獨立上傳(並行)。是[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