From 8b94ef8e442e56d5bd59e65421090d61008e001e Mon Sep 17 00:00:00 2001 From: Patrick Hernandez Date: Mon, 9 Apr 2012 00:19:28 -0500 Subject: [PATCH] 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 --- AFNetworking/AFHTTPClient.m | 20 +++++++------------- AFNetworking/AFHTTPRequestOperation.m | 1 + 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/AFNetworking/AFHTTPClient.m b/AFNetworking/AFHTTPClient.m index a5e2b2c..3d51efb 100644 --- a/AFNetworking/AFHTTPClient.m +++ b/AFNetworking/AFHTTPClient.m @@ -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); } diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index cb96e36..c9f2dad 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -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; }