思路:
(1)在显示图片前,先检查是否有内存缓存;
(2)有内存缓存,直接使用;
(3)如果没有内存缓存,再去检查是否有磁盘缓存;
(4)有磁盘缓存,直接使用 + 保存 一份到内存中(以后使用方便)
(5)没有磁盘缓存,就判断是否已经在下载了,如果没有下载,就开启线程下载;如果已下载,就下载图片并显示出来 + 保存一份到内存中 + 保存到磁盘
其中,内存有三种:
Doc:不允许,否是上架会被拒
Lib:
cache:图片缓存放在这里
偏好设置
tmp:临时存储路径,随时可能被删除
//获取缓存的路径并缓存图片:
- (void)getCachePath:(NSString *)imageUrl { //获取文件的名称 NSString *fileName = [imageUrl lastPathComponent]; //得到该路径的最后一个节点 //获取cache路径 NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; //拼接路径 NSString *fullPath = [cachePath stringByAppendingString:fileName]; //获取图片的数据 NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]; //图片数据写入缓存中 [imageData writeToFile:fullPath atomically:YES]; }