[Issue #469] Optimizing calculation of finished operations in batch progress callback

This commit is contained in:
Mattt Thompson 2012-08-22 11:31:49 -07:00
parent 2d7b2f35d6
commit 706fbe473d

View file

@ -585,8 +585,6 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
dispatch_release(dispatchGroup); dispatch_release(dispatchGroup);
}]; }];
NSPredicate *finishedOperationPredicate = [NSPredicate predicateWithFormat:@"isFinished == YES"];
for (AFHTTPRequestOperation *operation in operations) { for (AFHTTPRequestOperation *operation in operations) {
AFCompletionBlock originalCompletionBlock = [[operation.completionBlock copy] autorelease]; AFCompletionBlock originalCompletionBlock = [[operation.completionBlock copy] autorelease];
operation.completionBlock = ^{ operation.completionBlock = ^{
@ -596,8 +594,15 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
originalCompletionBlock(); originalCompletionBlock();
} }
__block NSUInteger numberOfCompletedOperations = 0;
[operations enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([(NSOperation *)obj isFinished]) {
numberOfCompletedOperations++;
}
}];
if (progressBlock) { if (progressBlock) {
progressBlock([[operations filteredArrayUsingPredicate:finishedOperationPredicate] count], [operations count]); progressBlock(numberOfCompletedOperations, [operations count]);
} }
dispatch_group_leave(dispatchGroup); dispatch_group_leave(dispatchGroup);