SDWebImage急于加载图像



我正试图加载一堆图像:

for (NSDictionary *s in things) {
    [manager downloadWithURL:[NSURL URLWithString:s[photo]]
                     options:0
                    progress:nil
                   completed:nil];
}

它不是在下载这些图片。然而,如果我通过一个空的完成块,就像这样:

for (NSDictionary *s in things) {
    [manager downloadWithURL:[NSURL URLWithString:s[photo]]
                     options:0
                    progress:nil
                   completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { }];
}

然后它就可以正常工作了。我的问题是:为什么?有更好的方法吗?在我看来,在一个空块中传球似乎不对。

您使用的API不是正确的API。

要预取图像并将其存储在缓存中,请使用SDWebImagePrefetcher

NSMutableArray * urls = [NSMutableArray arrayWithCapacity:things.count];
for (NSDictionary *s in things) {
    [urls addObject:[NSURL URLWithString:s[photo]]];
}
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:urls];

作为补充说明,我提交了一个pull请求(刚刚合并),以强制您(错误)使用的API中存在completedBlock,这样其他程序员就不会让您陷入同样的错误。

如果您仔细查看-[SDWebImageManager downloadWithURL:options:progress:completed:]实现,您会发现以下几行:

if (!url || !completedBlock || (!(options & SDWebImageRetryFailed) && isFailedUrl))
{
    if (completedBlock)
    {
        // Complain about invalid URL, completely irrelevant to us at this point.
        ...
    }
    return operation;
}

所以,是的,如果completionBlocknil,它什么也不做。为什么?SDWebImage开发人员可能认为,如果没有传递该参数,该方法就毫无用处。你最好创建一个GitHub问题来询问他们。

SDWebImage已经修复了完成块问题,现在只需一行Swift:就可以实现

SDWebImagePrefetcher.shared().prefetchURLs(urlArray)

最新更新