Optimized how enqueueing operations works

- Removed the NSBlockOperation as it was not longer needed for completion block to be fired appropriately
- Added a safety call to setCompletionBlock in AFHTTPRequestOperation to ensure that dispatch_group_leave would be called
This commit is contained in:
Patrick Hernandez 2012-04-09 00:19:28 -05:00
parent e47fc50903
commit 8b94ef8e44
2 changed files with 8 additions and 13 deletions

View file

@ -517,16 +517,6 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
{
dispatch_group_t dispatchGroup = dispatch_group_create();
NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{
if (completionBlock) {
dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^{
completionBlock(operations);
});
}
}];
[self.operationQueue addOperation:batchedOperation];
NSPredicate *finishedOperationPredicate = [NSPredicate predicateWithFormat:@"isFinished == YES"];
for (AFHTTPRequestOperation *operation in operations) {
@ -535,7 +525,7 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
operation.completionBlock = ^{
if (progressBlock) {
dispatch_group_async(dispatchGroup, dispatch_get_main_queue(), ^{
progressBlock([[batchedOperation.dependencies filteredArrayUsingPredicate:finishedOperationPredicate] count], [batchedOperation.dependencies count]);
progressBlock([[operations filteredArrayUsingPredicate:finishedOperationPredicate] count], [operations count]);
});
}
@ -543,11 +533,15 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
originalCompletionBlock();
}
};
[batchedOperation addDependency:operation];
[self enqueueHTTPRequestOperation:operation];
}
if (completionBlock) {
dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^{
completionBlock(operations);
});
}
dispatch_release(dispatchGroup);
}

View file

@ -79,6 +79,7 @@ static NSString * AFStringFromIndexSet(NSIndexSet *indexSet) {
self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];
self.dispatchSemaphore = dispatch_semaphore_create(1);
self.completionBlock = NULL;
return self;
}