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

This commit is contained in:
Olivier Poitrey 2013-06-12 17:01:01 +02:00
parent 9a1f072e5e
commit c6664248f1
3 changed files with 73 additions and 25 deletions

View File

@ -48,6 +48,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;
@ -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);
}

View File

@ -47,6 +47,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;
@ -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);
}
@ -98,6 +110,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;
@ -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);
}

View File

@ -53,6 +53,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;
@ -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);
}