问题
So, I have a group of ASINetworkQueues that currently run together resulting in a race condition when it comes to DB saves. I am trying to create an NSOperationQueue that will will queue each of these "sub queues". I currently have created an NSOperation with a main method that kicks off the "sub queue" to start it's download.
My problem is that each time I add a sub queue to the main queue using "addOperation" it fires that "main" method straight away so my sub queues run concurrently. I was under the impression the main method was fired one at a time. i.e. only for the operation at the top of the queue.
Maybe i'm missing something here but I can't seem to figure out how to stall the other operations until the first one has finished. Also, I can't even seem to get my program into a situation that results in isReady = 0 for the NSOperation.. that always gives back yes.
here's some code:
NOTE: I have set the NSOperation queue maxConcurrentOperations to 1.
NSOperation Main method:
-(void)main {
[subQueue download];
}
Setting up the queue:
ChapterDownloadOperation *cdo = [[ChapterDownloadOperation alloc] init];
cdo.chapter = ch;
[chapterDownloadQueue addOperation:cdo];
[cdo release];
If I add multiple operations the main method fires at the instance it is added to the queue. Is there another function that I should override and use for when that operation is ready to rock. I have a feeling the main method is for setting up the operation.
Any ideas greatly appreciated.
Thanks so much.
回答1:
NSOperationQueue will fire the main method as soon as it can balance that additional processing power.
To limit the queue to one Operation at a time, you could try adding dependencies between each operation before you queue them: [B addDependency:A]; //[B main] will not be called until A has finished executing
Do note however that if A is cancelled, B will still run.
Hope that helps!
回答2:
I have found this example to be very useful http://developer.apple.com/library/ios/#samplecode/ListAdder/Introduction/Intro.html
来源:https://stackoverflow.com/questions/6988307/ios-nsoperationqueue-operations-all-run-when-added-and-dont-queue