Просмотр исходного кода

Improved readability in `SDWebImageManager` by creating `safelyRemoveOperationFromRunning:` method

Bogdan Poplauschi 9 лет назад
Родитель
Сommit
265ace4
1 измененных файлов с 15 добавлено и 23 удалено
  1. 15 23
      SDWebImage/SDWebImageManager.m

+ 15 - 23
SDWebImage/SDWebImageManager.m

@@ -145,10 +145,7 @@
 
 
     operation.cacheOperation = [self.imageCache queryCacheOperationForKey:key done:^(UIImage *cachedImage, NSData *cachedData, SDImageCacheType cacheType) {
     operation.cacheOperation = [self.imageCache queryCacheOperationForKey:key done:^(UIImage *cachedImage, NSData *cachedData, SDImageCacheType cacheType) {
         if (operation.isCancelled) {
         if (operation.isCancelled) {
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-
+            [self safelyRemoveOperationFromRunning:operation];
             return;
             return;
         }
         }
 
 
@@ -242,22 +239,13 @@
                 }
                 }
 
 
                 if (finished) {
                 if (finished) {
-                    @synchronized (self.runningOperations) {
-                        if (strongOperation) {
-                            [self.runningOperations removeObject:strongOperation];
-                        }
-                    }
+                    [self safelyRemoveOperationFromRunning:strongOperation];
                 }
                 }
             }];
             }];
             operation.cancelBlock = ^{
             operation.cancelBlock = ^{
                 [self.imageDownloader cancel:subOperation];
                 [self.imageDownloader cancel:subOperation];
-
-                @synchronized (self.runningOperations) {
-                    __strong __typeof(weakOperation) strongOperation = weakOperation;
-                    if (strongOperation) {
-                        [self.runningOperations removeObject:strongOperation];
-                    }
-                }
+                __strong __typeof(weakOperation) strongOperation = weakOperation;
+                [self safelyRemoveOperationFromRunning:strongOperation];
             };
             };
         } else if (cachedImage) {
         } else if (cachedImage) {
             dispatch_main_async_safe(^{
             dispatch_main_async_safe(^{
@@ -266,9 +254,7 @@
                     completedBlock(cachedImage, cachedData, nil, cacheType, YES, url);
                     completedBlock(cachedImage, cachedData, nil, cacheType, YES, url);
                 }
                 }
             });
             });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
+            [self safelyRemoveOperationFromRunning:operation];
         } else {
         } else {
             // Image not in cache and download disallowed by delegate
             // Image not in cache and download disallowed by delegate
             dispatch_main_async_safe(^{
             dispatch_main_async_safe(^{
@@ -277,9 +263,7 @@
                     completedBlock(nil, nil, nil, SDImageCacheTypeNone, YES, url);
                     completedBlock(nil, nil, nil, SDImageCacheTypeNone, YES, url);
                 }
                 }
             });
             });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
+            [self safelyRemoveOperationFromRunning:operation];
         }
         }
     }];
     }];
 
 
@@ -303,12 +287,20 @@
 
 
 - (BOOL)isRunning {
 - (BOOL)isRunning {
     BOOL isRunning = NO;
     BOOL isRunning = NO;
-    @synchronized(self.runningOperations) {
+    @synchronized (self.runningOperations) {
         isRunning = (self.runningOperations.count > 0);
         isRunning = (self.runningOperations.count > 0);
     }
     }
     return isRunning;
     return isRunning;
 }
 }
 
 
+- (void)safelyRemoveOperationFromRunning:(nullable SDWebImageCombinedOperation*)operation {
+    @synchronized (self.runningOperations) {
+        if (operation) {
+            [self.runningOperations removeObject:operation];
+        }
+    }
+}
+
 @end
 @end