Wrapping JSON and image processing in GCD async dispatch

This commit is contained in:
Mattt Thompson 2011-08-09 14:53:23 -05:00
parent 662af980c3
commit f9073df97b
2 changed files with 45 additions and 39 deletions

View file

@ -47,26 +47,28 @@ static inline CGSize kAFImageRequestRoundedCornerRadii(CGSize imageSize) {
success:(void (^)(UIImage *image))success
{
return [self operationWithRequest:urlRequest completion:^(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error) {
UIImage *image = nil;
if ([[UIScreen mainScreen] scale] == 2.0) {
CGImageRef imageRef = [[UIImage imageWithData:data] CGImage];
image = [UIImage imageWithCGImage:imageRef scale:2.0 orientation:UIImageOrientationUp];
} else {
image = [UIImage imageWithData:data];
}
if (!(CGSizeEqualToSize(image.size, imageSize) || CGSizeEqualToSize(imageSize, CGSizeZero))) {
image = [UIImage imageByScalingAndCroppingImage:image size:imageSize];
}
if ((options & AFImageRequestRoundCorners)) {
image = [UIImage imageByRoundingCornersOfImage:image corners:UIRectCornerAllCorners cornerRadii:kAFImageRequestRoundedCornerRadii(image.size)];
}
if (success) {
success(image);
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
UIImage *image = nil;
if ([[UIScreen mainScreen] scale] == 2.0) {
CGImageRef imageRef = [[UIImage imageWithData:data] CGImage];
image = [UIImage imageWithCGImage:imageRef scale:2.0 orientation:UIImageOrientationUp];
} else {
image = [UIImage imageWithData:data];
}
if (!(CGSizeEqualToSize(image.size, imageSize) || CGSizeEqualToSize(imageSize, CGSizeZero))) {
image = [UIImage imageByScalingAndCroppingImage:image size:imageSize];
}
if ((options & AFImageRequestRoundCorners)) {
image = [UIImage imageByRoundingCornersOfImage:image corners:UIRectCornerAllCorners cornerRadii:kAFImageRequestRoundedCornerRadii(image.size)];
}
dispatch_sync(dispatch_get_main_queue(), ^(void) {
if (success) {
success(image);
}
});
[[AFImageCache sharedImageCache] cacheImage:image forRequest:request imageSize:imageSize options:options];
});
}];

View file

@ -62,27 +62,31 @@
failure(error);
}
} else {
id JSON = nil;
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3
if ([NSJSONSerialization class]) {
JSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
} else {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
id JSON = nil;
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3
if ([NSJSONSerialization class]) {
JSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
} else {
JSON = [[JSONDecoder decoder] objectWithData:data error:&error];
}
#else
JSON = [[JSONDecoder decoder] objectWithData:data error:&error];
}
#else
JSON = [[JSONDecoder decoder] objectWithData:data error:&error];
#endif
if (error) {
if (failure) {
failure(error);
}
} else {
if (success) {
success(JSON);
}
}
#endif
dispatch_sync(dispatch_get_main_queue(), ^(void) {
if (error) {
if (failure) {
failure(error);
}
} else {
if (success) {
success(JSON);
}
}
});
});
}
}];
}