首页 > 其他分享 >IOS开发-实现图片缓存优化性能

IOS开发-实现图片缓存优化性能

时间:2023-07-17 10:23:07浏览次数:35  
标签:cacheFilename 缓存 image IOS NSString 文件夹 优化 图片

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

 

标签:cacheFilename,缓存,image,IOS,NSString,文件夹,优化,图片
From: https://www.cnblogs.com/SadicZhou/p/17559274.html

相关文章

  • Redis多级缓存
    什么是多级缓存传统缓存的问题传统的缓存在请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,存在以下问题:请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时,会对数据库产生冲击多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提......
  • 分布式缓存
    单点redis的问题数据丢失问题:Redis是内存存储,服务重启可能会丢失数据。解决:数据持久化并发能力问题:单节点并发能力不足。解决:主从集群,读写分离。故障恢复:需要自动的故障恢复手段。解决:Redis哨兵,实现健康检测和自动恢复。存储能力问题:单节点Redis难以满足海量数据存储。解决:搭......
  • 【DP】01背包与完全背包总结及空间优化
    01背包问题​ 题目描述:有n件物品,每件物品的重量为w[i],价值为c[i]。现在有一个容量为V的背包,问怎么选取物品放入背包,能使得背包内的总价值最大。其中每件物品只能放入一次。​ 样例:n=5,V=8w[i]=3,5,1,2,2c[i]=4,5,2,1,3​ 分析:使用暴力的解法,每件物品分为放......
  • 对安装Linux的服务器进行缓存清除
    对安装Linux的服务器进行缓存清除原创 二河小鱼 人文历史与科学技术 2023-07-1118:10 发表于江西收录于合集#服务器99个#Linux运维101个#清除缓存1个安装Linux的服务器缓存过高导致服务器运行速度慢第一步,查看当前服务器中Linux系统的状态。命令:free-h编......
  • react axios跨域解决方案
    跨域问题及其解决方案在Web开发过程中,由于同源策略的限制,浏览器会阻止发送跨域请求,这给前端开发带来了一定的挑战。而在使用React框架进行开发时,我们经常使用Axios库来进行数据通信,因此需要解决Axios跨域问题。本文将为您介绍React中使用Axios解决跨域问题的方案,并提供相应的代码......
  • 并发程序的性能瓶颈和常见优化策略
    并发程序的性能瓶颈主要包括以下方面:硬件瓶颈:CPU核心数量、内存带宽、磁盘I/O等硬件资源限制。软件瓶颈:并发算法、锁竞争、线程调度等软件因素导致性能受限。数据瓶颈:数据访问模式、数据量、数据结构等数据因素导致性能受限。针对这些性能瓶颈,常见的优化策略包括以下几个......
  • 缓存
    缓存缓存,是一种减少I/O读写和CPU计算,以提升性能的手段。缓存的使用主要用在需要频繁读某些不变动,或者变动较少的数据的场景。一般使用场景是:应用中使用缓存,需要读数据时,先去缓存中查询。缓存中没有的话,再查数据库,查到数据后返回结果,并将结果写到缓存中。缓存分类本地缓存......
  • vue项目ios真机测试
    如何实现“Vue项目iOS真机测试”简介在开发Vue项目时,我们通常需要进行测试来确保项目在不同平台上的兼容性和稳定性。本文将为刚入行的开发者介绍如何在iOS设备上进行Vue项目的真机测试。流程下面是实现Vue项目iOS真机测试的整体流程:步骤说明步骤一环境准备步骤......
  • vue3axios怎么用
    Vue3中使用axios在Vue3中,可以使用axios来进行网络请求。axios是一个基于Promise的HTTP客户端,可以用于浏览器和Node.js,非常便捷和强大。安装axios在开始之前,首先需要安装axios。可以通过npm或者yarn来安装:npminstallaxios引入axios在Vue3中,可以使用import来引入axios:impor......
  • vue3axiosjwt拦截器
    实现Vue3axiosjwt拦截器介绍在Vue3项目中使用axios进行网络请求时,我们经常需要在每次请求中添加JWT令牌(JSONWebToken)以进行身份验证。为了简化这个过程,我们可以使用axios的拦截器来实现自动添加JWT令牌的功能。本文将指导你如何使用Vue3、axios和JWT来实现拦截器。整体流程......