Wrapping JSON and image processing in GCD async dispatch
This commit is contained in:
parent
662af980c3
commit
f9073df97b
2 changed files with 45 additions and 39 deletions
|
|
@ -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];
|
||||
});
|
||||
}];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue