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来实现图片缓存就已经完成了,可以有效的提高页面的渲染速度,优化性能

 

posted @ 2023-07-17 10:12  SadicZhou  阅读(198)  评论(0编辑  收藏  举报