From 9a3aff485191471e16d36303c8dbe917fda4e7ec Mon Sep 17 00:00:00 2001 From: Matej Bukovinski Date: Mon, 19 Nov 2012 11:47:19 +0100 Subject: [PATCH] Always making callbacks using the main thread. Even if using the downloader directly without SDWebImageManager. --- SDWebImage/SDWebImageDownloaderOperation.m | 24 ++++++++++++++-------- SDWebImage/SDWebImageManager.m | 9 +------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/SDWebImage/SDWebImageDownloaderOperation.m b/SDWebImage/SDWebImageDownloaderOperation.m index 7996b16..f317a0f 100644 --- a/SDWebImage/SDWebImageDownloaderOperation.m +++ b/SDWebImage/SDWebImageDownloaderOperation.m @@ -146,12 +146,17 @@ { dispatch_async(self.queue, ^ { - self.expectedSize = response.expectedContentLength > 0 ? (NSUInteger)response.expectedContentLength : 0; - self.imageData = [NSMutableData.alloc initWithCapacity:self.expectedSize]; - if (self.progressBlock) + NSUInteger expected = response.expectedContentLength > 0 ? (NSUInteger)response.expectedContentLength : 0; + self.imageData = [NSMutableData.alloc initWithCapacity:expected]; + self.expectedSize = expected; + + dispatch_async(dispatch_get_main_queue(), ^ { - self.progressBlock(0, self.expectedSize); - } + if (self.progressBlock) + { + self.progressBlock(0, expected); + } + }); }); } else @@ -238,10 +243,13 @@ CFRelease(imageSource); } - if (self.progressBlock) + dispatch_async(dispatch_get_main_queue(), ^ { - self.progressBlock(self.imageData.length, self.expectedSize); - } + if (self.progressBlock) + { + self.progressBlock(self.imageData.length, self.expectedSize); + } + }); }); } diff --git a/SDWebImage/SDWebImageManager.m b/SDWebImage/SDWebImageManager.m index 314067f..380ea19 100644 --- a/SDWebImage/SDWebImageManager.m +++ b/SDWebImage/SDWebImageManager.m @@ -97,14 +97,7 @@ SDWebImageDownloaderOptions downloaderOptions = 0; if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload; - __block id subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:^(NSUInteger receivedSize, long long expectedSize) - { - dispatch_async(dispatch_get_main_queue(), ^ - { - progressBlock(receivedSize, expectedSize); - }); - } - completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) + __block id subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { dispatch_async(dispatch_get_main_queue(), ^ {