Browse Source

Fix #1366, addresses #1350 and reverts a part of #1221 - from commit 6406d8e, the wrong usage of dispatch_apply

Bogdan Poplauschi 10 years ago
parent
commit
cac21e1
1 changed files with 3 additions and 18 deletions
  1. 3 18
      SDWebImage/SDWebImagePrefetcher.m

+ 3 - 18
SDWebImage/SDWebImagePrefetcher.m

@@ -112,29 +112,14 @@
     self.completionBlock = completionBlock;
     self.progressBlock = progressBlock;
 
-    __weak SDWebImagePrefetcher *weakSelf = self;
-
     if (urls.count == 0) {
         if (completionBlock) {
             completionBlock(0,0);
         }
     } else {
-        // http://oleb.net/blog/2013/07/parallelize-for-loops-gcd-dispatch_apply/
-        // Optimize the maxConcurrentdownloads for effeciency. Since caching operations are involved that are non-trivial using
-        // dispatch_apply might be helpful.
-
-        NSInteger maxNumberOfImages = self.prefetchURLs.count;
-
-        dispatch_apply(maxNumberOfImages/self.maxConcurrentDownloads, self.prefetcherQueue, ^(size_t index) {
-            size_t i = index * self.maxConcurrentDownloads;
-            size_t stop = i + self.maxConcurrentDownloads;
-            do {
-                [weakSelf startPrefetchingAtIndex:i++];
-            } while (i < stop);
-        });
-
-        // Download remaining images.
-        for (size_t i = maxNumberOfImages - (maxNumberOfImages % self.maxConcurrentDownloads); i < (size_t)maxNumberOfImages; i++) {
+        // Starts prefetching from the very first image on the list with the max allowed concurrency
+        NSUInteger listCount = self.prefetchURLs.count;
+        for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {
             [self startPrefetchingAtIndex:i];
         }
     }