Question

I have 2 AFNetoworking operations fetching me data, and i have a method that requires both of them to be completed. I've read on the internet i could have an NSOperationQueue to make 1 operation dependent on another operation finishing. While this seems like a good solution in some cases, it seems like it would be difficult if I have code that isnt suited to be an NSOperation.

For example (for illustration purposes) 1. API call A gets an image A 2. API call B gets another image B 3. the maskImage function masks image B onto A

any insights would be helpful!

Was it helpful?

Solution

I'm not sure about what sort of code you consider ill-suited for NSOperation, but I'm wondering if your reticence to use NSOperation stems from a desire to avoid writing your own NSOperation subclass. Fortunately, using operation queues is much simpler than that. You can use NSBlockOperation or NSInvocationOperation to quickly create operations.

I would generally use a NSBlockOperation:

NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
    // do my image processing
    [self applyMaskToImage];
}];

Or you could use a NSInvocationOperation:

NSOperation *completionOperation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(applyMaskToImage)
                                                                          object:nil];

You can then (a) call addDependency for each of your two download operations, to make completionOperation dependent upon both; and (b) add the completionOperation to your own queue.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top