Authored by Olivier Poitrey

Ensure we always set the UIKit image properties from the main thread (fix #403, fix #417, fix #398)

... ... @@ -49,6 +49,9 @@ static char operationKey;
__weak MKAnnotationView *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
if (!wself) return;
void (^block)(void) = ^
{
__strong MKAnnotationView *sself = wself;
if (!sself) return;
if (image)
... ... @@ -59,6 +62,15 @@ static char operationKey;
{
completedBlock(image, error, cacheType);
}
};
if ([NSThread isMainThread])
{
block();
}
else
{
dispatch_sync(dispatch_get_main_queue(), block);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
... ...
... ... @@ -48,6 +48,9 @@ static char operationKey;
__weak UIButton *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
if (!wself) return;
void (^block)(void) = ^
{
__strong UIButton *sself = wself;
if (!sself) return;
if (image)
... ... @@ -58,6 +61,15 @@ static char operationKey;
{
completedBlock(image, error, cacheType);
}
};
if ([NSThread isMainThread])
{
block();
}
else
{
dispatch_sync(dispatch_get_main_queue(), block);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
... ... @@ -99,6 +111,9 @@ static char operationKey;
__weak UIButton *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
if (!wself) return;
void (^block)(void) = ^
{
__strong UIButton *sself = wself;
if (!sself) return;
if (image)
... ... @@ -109,6 +124,15 @@ static char operationKey;
{
completedBlock(image, error, cacheType);
}
};
if ([NSThread isMainThread])
{
block();
}
else
{
dispatch_sync(dispatch_get_main_queue(), block);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
... ...
... ... @@ -54,6 +54,9 @@ static char operationKey;
__weak UIImageView *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
if (!wself) return;
void (^block)(void) = ^
{
__strong UIImageView *sself = wself;
if (!sself) return;
if (image)
... ... @@ -65,6 +68,15 @@ static char operationKey;
{
completedBlock(image, error, cacheType);
}
};
if ([NSThread isMainThread])
{
block();
}
else
{
dispatch_sync(dispatch_get_main_queue(), block);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
... ...