IOS开发-实现图片缓存优化性能
在Objective-C中,可以这么实现图片的本地缓存:
1. 创建一个用于存储图片的缓存文件夹;
2. 根据图片URL构建缓存文件名;
3. 检查缓存路径是否存在,如果存在直接读取缓存图片;
4. 不存在则从网络下载图片;
5. 保存图片到缓存,以名称cacheFilename;
6. 以后再加载同一个URL的图片,就直接从缓存读取;
7. 根据需要,可以清空整个缓存文件夹;
1.创建一个用于存储图片的缓存文件夹,这里我是在AppDelegated文件的application钩子函数里面创建的;所以我加了一个判断文件夹是否存在的判断,如果存在就直接使用,不存在则创建
//创建图片缓存文件夹,用来缓存图片资源提高性能 NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *imageCachePath = [cachePath stringByAppendingPathComponent:@"ImageCache"]; if ([[NSFileManager defaultManager] fileExistsAtPath:imageCachePath]) { // 缓存文件夹已经存在,可以直接使用 } else { // 缓存文件夹不存在,需要创建 [[NSFileManager defaultManager] createDirectoryAtPath:imageCachePath withIntermediateDirectories:YES attributes:nil error:nil]; }
2.实现下载图片的方法
这个方法调用的时机就是获取到接口返回的url之后
方法的具体实现思路就是文章开头的1-6步,不在赘述,直接上代码
-(void)downloadImage{ //首先获取缓存文件夹的路径 - imageCachePath NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *imageCachePath = [cachePath stringByAppendingPathComponent:@"ImageCache"]; NSString*base=@"http://121.41.109.231:8087"; base = [base stringByAppendingString:_iconurl]; NSURL *imageUrl = [NSURL URLWithString:base]; //根据图片URL构建缓存文件名: NSString *cacheFilename = [[imageUrl lastPathComponent] stringByDeletingPathExtension]; cacheFilename = [cacheFilename stringByAppendingString:@".cached"]; //检查缓存路径是否存在,如果存在直接读取缓存图片: NSString *cacheFile = [imageCachePath stringByAppendingPathComponent:cacheFilename]; if ([[NSFileManager defaultManager] fileExistsAtPath:cacheFile]) { UIImage *image = [UIImage imageWithContentsOfFile:cacheFile]; _icon.image =[UIImage imageNamed:@""]; _icon.image =image; // 使用缓存图片 }else{ //否则从网络下载图片: NSData *imageData = [NSData dataWithContentsOfURL:imageUrl]; UIImage *image = [UIImage imageWithData:imageData]; _icon.image =[UIImage imageNamed:@""]; _icon.image =image; // 保存图片到缓存,以名称cacheFilename: [imageData writeToFile:cacheFile atomically:YES]; } }
这样在IOS中使用Object-c来实现图片缓存就已经完成了,可以有效的提高页面的渲染速度,优化性能