diff --git a/SDWebImage/SDWebImagePrefetcher.m b/SDWebImage/SDWebImagePrefetcher.m index a2ad8a86..531101ae 100644 --- a/SDWebImage/SDWebImagePrefetcher.m +++ b/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]; } }