@@ -158,11 +158,11 @@ - (BOOL)cancel:(nullable id)token {
158
158
[self .callbackTokens removeObjectIdenticalTo: token];
159
159
}
160
160
SDWebImageDownloaderCompletedBlock completedBlock = ((SDWebImageDownloaderOperationToken *)token).completedBlock ;
161
- dispatch_main_async_safe (^ {
162
- if (completedBlock) {
161
+ if (completedBlock) {
162
+ dispatch_main_async_safe (^ {
163
163
completedBlock (nil , nil , [NSError errorWithDomain: SDWebImageErrorDomain code: SDWebImageErrorCancelled userInfo: @{NSLocalizedDescriptionKey : @" Operation cancelled by user during sending the request" }], YES );
164
- }
165
- });
164
+ });
165
+ }
166
166
}
167
167
return shouldCancel;
168
168
}
@@ -244,7 +244,10 @@ - (void)start {
244
244
self.coderQueue .qualityOfService = NSQualityOfServiceDefault ;
245
245
}
246
246
[self .dataTask resume ];
247
- NSArray <SDWebImageDownloaderOperationToken *> *tokens = [self .callbackTokens copy ];
247
+ NSArray <SDWebImageDownloaderOperationToken *> *tokens;
248
+ @synchronized (self) {
249
+ tokens = [self .callbackTokens copy ];
250
+ }
248
251
for (SDWebImageDownloaderOperationToken *token in tokens) {
249
252
if (token.progressBlock ) {
250
253
token.progressBlock (0 , NSURLResponseUnknownLength, self.request .URL );
@@ -694,11 +697,12 @@ - (void)callCompletionBlocksWithImage:(nullable UIImage *)image
694
697
tokens = [self .callbackTokens copy ];
695
698
}
696
699
for (SDWebImageDownloaderOperationToken *token in tokens) {
697
- dispatch_main_async_safe (^{
698
- if (token.completedBlock ) {
699
- token.completedBlock (image, imageData, error, finished);
700
- }
701
- });
700
+ SDWebImageDownloaderCompletedBlock completedBlock = token.completedBlock ;
701
+ if (completedBlock) {
702
+ dispatch_main_async_safe (^{
703
+ completedBlock (image, imageData, error, finished);
704
+ });
705
+ }
702
706
}
703
707
}
704
708
@@ -707,11 +711,12 @@ - (void)callCompletionBlockWithToken:(nonnull SDWebImageDownloaderOperationToken
707
711
imageData : (nullable NSData *)imageData
708
712
error : (nullable NSError *)error
709
713
finished : (BOOL )finished {
710
- dispatch_main_async_safe (^{
711
- if (token.completedBlock ) {
712
- token.completedBlock (image, imageData, error, finished);
713
- }
714
- });
714
+ SDWebImageDownloaderCompletedBlock completedBlock = token.completedBlock ;
715
+ if (completedBlock) {
716
+ dispatch_main_async_safe (^{
717
+ completedBlock (image, imageData, error, finished);
718
+ });
719
+ }
715
720
}
716
721
717
722
@end
0 commit comments