我正在使用SDWebImage插件,我遇到了以下情况:我有两个UIViewController
的A和B.在UIViewControllerB
我正在加载一系列10 - 15个图像来自UIImageView中的Web,代码如下:
UIImageView *imageView = [[UIImageView alloc] init];
[imageView sd_setImageWithURL:[NSURL URLWithString:[sourceDictionary objectForKey:@"image"]]
placeholderImage:[UIImage imageNamed:@"placeholder"]];
这很有效。除非我在用户加载UIViewControllerB
后开始下载这些图像。我想知道在用户还在UIViewControllerA
时是否有办法让我开始预先缓存或开始下载这些图像,这样当用户到达UIViewControllerB
时,他们会看到更短的延迟?如果用户在下载过程中切换到第二个视图控制器,我将如何以一种方式执行此操作以使图像不会被下载两次?
答案 0 :(得分:1)
可能的解决方法可能是使用Singleton模式实现自定义下载管理器,因此A
和B
都可以使用它。
然后,您可以跟踪请求下载的图像URL列表以及下载完成时要调用的completed
处理程序。
首先,检查是否已经没有进行具有相同URL的图像下载,然后将图像添加到列表和已完成的处理程序中,或者只添加新的处理程序。您可以使用字典作为存储,使用URL作为键。
然后,您可以SDWebImageManager
方法使用downloadImageWithURL
,completed
方法可以从列表中删除图片并触发相应的completed
处理程序。
所以在B
您知道下载已经完成。您不需要使用SDWebImageCache
手动缓存图像,让SDWebImage
自动为您执行此操作,因此当您调用完成的方法时,只需执行相同的操作,但由于图像已经已下载SDWebImage
将从缓存中获取它。或者,您可以将UIImage
下载的completed
发送回<?php
namespace Kata;
class StringCalculator
{
public function add(string $parameters): int {
return 0;
}
}
处理程序。