Iphone 如何在使用SDWebimage显示之前在缓存中下载web图像?

Iphone 如何在使用SDWebimage显示之前在缓存中下载web图像?,iphone,ios,caching,grand-central-dispatch,sdwebimage,Iphone,Ios,Caching,Grand Central Dispatch,Sdwebimage,我必须在我的应用程序中下载大量的网络图像。现在我正在尝试使用Grand Central Dispatch在我的第一堂课中下载图像 代码: 但是上面的代码只在应用程序第一次启动时下载30到40个图像,之后它停止在缓存中下载图像,直到我停止应用程序并再次运行它,然后第二次它在缓存中下载更多的图像,然后停止下载,依此类推 所以我的问题是,为什么它在下载了一些图像后会停止,我希望它一直在缓存中下载图像,直到它下载了所有的图像 因此,您正在视图控制器中进行下载(将其放入“viewdiload”方法可以证明

我必须在我的应用程序中下载大量的网络图像。现在我正在尝试使用Grand Central Dispatch在我的第一堂课中下载图像

代码:

但是上面的代码只在应用程序第一次启动时下载30到40个图像,之后它停止在缓存中下载图像,直到我停止应用程序并再次运行它,然后第二次它在缓存中下载更多的图像,然后停止下载,依此类推


所以我的问题是,为什么它在下载了一些图像后会停止,我希望它一直在缓存中下载图像,直到它下载了所有的图像

因此,您正在视图控制器中进行下载(将其放入“
viewdiload
”方法可以证明这一点)

可能发生的情况是,当您移动到另一个视图时,或者当视图控制器从内存中解除分配时,您在该调度队列中使用的“
管理器”
”对象也在视图控制器离开内存时被释放

这就是下载停止的原因

为了证明我是对的,请将正在进行所有GCD工作的视图留在屏幕上。我打赌你会得到你所有的照片,而不仅仅是30或40张

您需要做的是将此代码移动到它可以生存的地方,直到下载完成(可能不是视图控制器,只要用户想看到它,视图控制器就一直在屏幕上)

- (void)viewDidLoad
{
[super viewDidLoad];

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
    dispatch_async(queue, ^{
    // Perform non main thread operation
    for (NSString *imageURL in tempoaryArr1) {
        NSURL *url = [NSURL URLWithString:imageURL];

        SDWebImageManager *manager = [SDWebImageManager sharedManager];

        [manager downloadWithURL:url
                        delegate:self
                         options:0
                         success:^(UIImage *image, BOOL cached)
         {

         }
                         failure:nil];


    }
    dispatch_sync(dispatch_get_main_queue(), ^{
        // perform main thread operation
    });
});
}
SDWebImageManager *manager = [SDWebImageManager sharedManager];

[manager downloadImageWithURL:Imageurl options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize)

{


} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {

    if(image){
        NSLog(@"image=====%@",image);
    }
}]