Fixing optimization to not re-initiate duplicated calls to a UIImageView, by adding missing check to see if the last operation was cancelled

This commit is contained in:
Mattt Thompson 2011-09-21 15:50:22 -05:00
parent 6832cd0e16
commit 3b81cd32a7

View file

@ -105,7 +105,7 @@ static NSString * const kUIImageViewImageRequestObjectKey = @"_af_imageRequestOp
placeholderImage:(UIImage *)placeholderImage placeholderImage:(UIImage *)placeholderImage
success:(void (^)(UIImage *image, BOOL cacheUsed))success success:(void (^)(UIImage *image, BOOL cacheUsed))success
{ {
if (!url || [url isEqual:self.imageRequestOperation.request.URL]) { if (!url || (![self.imageRequestOperation isCancelled] && [url isEqual:self.imageRequestOperation.request.URL])) {
return; return;
} else { } else {
[self cancelImageRequestOperation]; [self cancelImageRequestOperation];
@ -138,15 +138,17 @@ static NSString * const kUIImageViewImageRequestObjectKey = @"_af_imageRequestOp
return image; return image;
} cacheName:cacheName success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { } cacheName:cacheName success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
if (self.imageRequestOperation && ![self.imageRequestOperation isCancelled]) { if (self.imageRequestOperation && ![self.imageRequestOperation isCancelled]) {
if (success) { dispatch_async(dispatch_get_main_queue(), ^{
success(image, NO); if (success) {
} success(image, NO);
}
if ([[request URL] isEqual:[[self.imageRequestOperation request] URL]]) { if ([[request URL] isEqual:[[self.imageRequestOperation request] URL]]) {
self.image = image; self.image = image;
} else { } else {
self.image = placeholderImage; self.image = placeholderImage;
} }
});
} }
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
self.imageRequestOperation = nil; self.imageRequestOperation = nil;