diff --git a/SDWebImage/MKAnnotationView+WebCache.m b/SDWebImage/MKAnnotationView+WebCache.m index 8f27a17..4485fb2 100644 --- a/SDWebImage/MKAnnotationView+WebCache.m +++ b/SDWebImage/MKAnnotationView+WebCache.m @@ -49,15 +49,27 @@ static char operationKey; __weak MKAnnotationView *wself = self; id operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - __strong MKAnnotationView *sself = wself; - if (!sself) return; - if (image) + if (!wself) return; + void (^block)(void) = ^ { - sself.image = image; + __strong MKAnnotationView *sself = wself; + if (!sself) return; + if (image) + { + sself.image = image; + } + if (completedBlock && finished) + { + completedBlock(image, error, cacheType); + } + }; + if ([NSThread isMainThread]) + { + block(); } - if (completedBlock && finished) + else { - completedBlock(image, error, cacheType); + dispatch_sync(dispatch_get_main_queue(), block); } }]; objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); diff --git a/SDWebImage/UIButton+WebCache.m b/SDWebImage/UIButton+WebCache.m index 53c99a5..ba1734d 100644 --- a/SDWebImage/UIButton+WebCache.m +++ b/SDWebImage/UIButton+WebCache.m @@ -48,15 +48,27 @@ static char operationKey; __weak UIButton *wself = self; id operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - __strong UIButton *sself = wself; - if (!sself) return; - if (image) + if (!wself) return; + void (^block)(void) = ^ { - [sself setImage:image forState:state]; + __strong UIButton *sself = wself; + if (!sself) return; + if (image) + { + [sself setImage:image forState:state]; + } + if (completedBlock && finished) + { + completedBlock(image, error, cacheType); + } + }; + if ([NSThread isMainThread]) + { + block(); } - if (completedBlock && finished) + else { - completedBlock(image, error, cacheType); + dispatch_sync(dispatch_get_main_queue(), block); } }]; objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); @@ -99,15 +111,27 @@ static char operationKey; __weak UIButton *wself = self; id operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - __strong UIButton *sself = wself; - if (!sself) return; - if (image) + if (!wself) return; + void (^block)(void) = ^ { - [sself setBackgroundImage:image forState:state]; + __strong UIButton *sself = wself; + if (!sself) return; + if (image) + { + [sself setBackgroundImage:image forState:state]; + } + if (completedBlock && finished) + { + completedBlock(image, error, cacheType); + } + }; + if ([NSThread isMainThread]) + { + block(); } - if (completedBlock && finished) + else { - completedBlock(image, error, cacheType); + dispatch_sync(dispatch_get_main_queue(), block); } }]; objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); diff --git a/SDWebImage/UIImageView+WebCache.m b/SDWebImage/UIImageView+WebCache.m index 01eab54..2bfc31a 100644 --- a/SDWebImage/UIImageView+WebCache.m +++ b/SDWebImage/UIImageView+WebCache.m @@ -54,16 +54,28 @@ static char operationKey; __weak UIImageView *wself = self; id operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - __strong UIImageView *sself = wself; - if (!sself) return; - if (image) + if (!wself) return; + void (^block)(void) = ^ { - sself.image = image; - [sself setNeedsLayout]; + __strong UIImageView *sself = wself; + if (!sself) return; + if (image) + { + sself.image = image; + [sself setNeedsLayout]; + } + if (completedBlock && finished) + { + completedBlock(image, error, cacheType); + } + }; + if ([NSThread isMainThread]) + { + block(); } - if (completedBlock && finished) + else { - completedBlock(image, error, cacheType); + dispatch_sync(dispatch_get_main_queue(), block); } }]; objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);