利用NSCache 和 沙盒文件存储 进行 app当中的数据缓存

【iOS】iOS持久化 iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间)。应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应用程序需要向外部请求或接收数据时,都需要经过权限认证,否则,无法获取到数据。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。 阅读详情

     在iOS 的数据存储类中,NSCache 和 NSDictionary 类很像,都是通过key值寻找其对应的值。不同的是,在内存不足时,NSCache 会自动释放。
     在很多的app中,要求数据缓存,或者是图片进行缓存,如果直接在沙盒文件当中读取,会出现app前端出现卡顿的现象。
     所以,可以利用NSCache和文件结合的方式,先将文件当中的数据读取到NSCache类当中,前台加载时可以读取NSCache类,如果NSCache 中没有相应的数据,则再从文件当中读取。
     
功能:
     1、在没有进行网络连接或者是在没有网络数据获取时,首先加载app中存储的数据和图片。
      2、缓存数据的存储为:获取数据——>存放到NSCache——>写入到文件当中 ,为了不阻碍主线程的运行,文件存储在子线程当中
     3、缓存数据的读取为:判断NSCache 中是否有缓存数据——>(若没有缓存数据)读取文件当中的数据

 使用方式:
     类文件为 CacheModel类,点此下载
 

目前可以使用的方法共有3个

/*
    单例模式
*/
+ (CacheModel *)sharedWithCacheModel;

/*
    从NSCache读写数据
*/
- (id)readInfoFromCacheByKey:(NSString *)Key Type:(NSString *)type;
- (void)writeInfoToCacheByKey:(NSString *)Key Type:(NSString *)type Content:(id)content;

读取数据时的使用方式
- (id)readInfoFromCacheByKey:(NSString *)Key Type:(NSString *)type;
Key: 表示在cache当中存放的Key值
Type: 表示需要缓存数据返回的类型,目前可以返回NSString、NSArray及NSDictionary三种类型
举例:
 
 NSDictionary *info = [[CacheModel sharedWithCacheModel] readInfoFromCacheByKey:CacheFileName Type:NSStringFromClass([NSDictionary class])]; 
表示是查找 CacheFileName 为key值,以NSDictionary类型返回 的数据



数据写入时的使用方式
- (void)writeInfoToCacheByKey:(NSString *)Key Type:(NSString *)type Content:(id)content;
content:需要写入的内容
type 为content 的类型,如果content类型为NSDictionary,则type为NSStringFromClass([NSDictionary class])




iOS第十一篇 iOS项目本地存储方案大全 iOS开发中有多种本地数据存储方案,每种方案都有其适用场景和特点。 阅读详情

相关推荐

Objective - C在移动开发领域的数据缓存策略

移动应用的用户体验核心是“快”:打开APP要快、滑动列表要快、切换页面要快。但网络请求受限于信号强弱、服务器响应速度,无法保证绝对“快”。数据缓存正是解决这一矛盾的关键技术——通过将常用数据存储在手机内存或磁盘中,减少重复网络请求。本文聚焦Objective-C语言,覆盖iOS开发中最常用的内存缓存(如NSCache)、磁盘缓存(如、文件存储)、混合缓存策略(如内存+磁盘结合),并深入讲解LRU(最近最少使用)、FIFO(先进先出)等经典淘汰算法的OC实现。

移动开发前沿的博客 1116

Swift之一步一步带你封装一个本地缓存库

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34383618的博客 265

swift内存缓存NSCache和沙盒磁盘缓存使用教程和demo下载

以前写过oc的NSCache缓存和沙盒,最近项目也要用到缓存,而且不只是图片还有视频,如果只是图片,用SDWebImage框架自带的缓存机制就行了,但是加上视频,就得自己写了.

NSCache介绍及使用

构建缓存时选用NSCache而非NSDictionary在写 程序时,经常遇到从网络上下载图片的问题,比如客户要求应用上的图片他们可以在后台修改等,那从网上下载的图片如何来缓存呢?一开始我们的做法是将图片存到一个NSMutableDictionary中,这样稍后使用时就无需下载了,但是Foundation还给我们提供了一个NSCache的类,从名字我们就知道是用来处理缓存的。问题一:为什么使用NSC

onebutterfly 1214

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

数字IC设计之时序分析基础概念汇总

时序分析主要有两种办法:静态时序分析: (static timing analysis,STA),是遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误。

weixin_45230720的博客 5601

NSC_BUILDER:5分钟掌握Switch游戏文件全能管理,解决格式转换与批量处理难题

Nintendo Switch游戏文件管理常让人头疼:NSP、XCI格式不兼容、批量操作效率低、文件信息难以获取。NSC_BUILDER作为一款基于Python和批处理脚本的开源工具,集成了hacbuild和Nut库的强大功能,能够一站式解决这些痛点。从格式转换到批量处理,从文件验证到元数据管理,这款"Switch瑞士军刀"让复杂的游戏文件管理变得简单高效。 [![NSC_BUILDER界面截图

gitblog_00294的博客 531

用Charles抓包调试iOS应用?这份保姆级配置指南帮你绕过所有坑

本文提供了一份在Mac上使用Charles抓包调试iOS应用的保姆级配置指南。详细讲解了从Charles安装、Mac端代理设置、根证书安装,到iOS设备连接同一WiFi、配置代理以及最关键的系统证书信任等全流程步骤,并分享了SSL代理规则、断点调试等进阶技巧,帮助开发者高效定位和解决网络请求问题。

rice5的博客 638

利用NSCache提升效率

在ios中,苹果提供了,NSCache类和NSDictionary很相似,提供key,value的存储,不一样的是NSCache在内存吃紧的时候会做自动释放。 遇到一个问题是,在使用大量图片的app中,需要从存储里面读取数据,每次都从文件系统里面读取文件会造成卡顿现象。 解决办法就是把NSData对象缓存起来,先从NSCache里面读取数据,然后再从文件系统获取数据,提高效率。...

weixin_30394981的博客 255

Dr_can Kalman Filter学习笔记(一)

本文是在b站Dr_can的卡尔曼滤波课程学习过程中的学习笔记

苏大侠的博客 1051

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 271

多线程(四) SDWebImage,NSCache

补充知识点:NSCache     {         // 可以选择 NSCache 代替字典作为缓存机制.         NSCache类结合了各种自动删除策略,以确保不会占用过多的系统内存.如果其它应用需要内存时,系统自动执行这些策略.         NSCache是线程安全的,我们可以在不同的线程中添加/删除和查询缓存中的对象,而不需要锁定缓存区域.

M_SR_的博客 617

synopsys工具安装系列(一)安装installer

synopsys为eda工具安装,提供了一个安装器,名叫installer。所以,首先要先安装installer这个工具,之后才能安装其他的eda工具。 首先从官网下载该installer工具。我这里下载的是5.2版本 下载之后,有如下安装文件。 将该安装包,拷贝到linux服务器中。 首先给SynopsysInstaller_v5.2.run赋予可执行权限。 chmod a+x SynopsysInstaller_...

weiqi7777的博客 8388

iOS 数据持久化

/文件路径搜索参数一 NSSearchPathDirectory directory:指定搜索的目录名称,比如这里用NSDocumentDirectory表明我们要搜索的是Documents目录。参数二:搜索主目录的位置,NSUserDomainMask表示搜索的范围限制于当前应用的沙盒目录。参数三:是否获取完整的路径,我们知道在iOS中的全写形式是/User/userName,该值为YES即表示写成全写形式,为NO就表示直接写成“~”。//获取沙盒根路径。

qq_73106050的博客 1468

第 10 篇:深度学习的“军火库”——CNN、RNN与Transformer,AI如何看懂世界?

深度学习的革命,不是依赖单一的通用大脑,而是为不同任务打造了专属“军火库”:CNN用“局部感知”看懂图像,RNN用“循环记忆”理解序列,而Transformer则用“全局注意力”开启了AIGC时代。理解这些架构,不是记忆孤立的技术,而是洞察AI从“专才”走向“通才”的进化脉络。

maqh_csdn的博客 786

Python 爬虫实战:微博自动化运营工具(点赞 / 转发 / 评论 + 反封号策略)

微博作为中国最大的社交媒体平台之一,拥有庞大的用户群体和丰富的数据资源。通过 Python 爬虫技术,我们可以实现微博的自动化运营,包括点赞、转发、评论等功能,同时采取有效的反封号策略,确保账号的安全和稳定运行。

u014481728的博客 1176

【iOS】数据存储与持久化

项目总结时,涉及了很多数据存储与持久化,这里做一个对比总结。

2401_87841908的博客 273

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【iOS】数据持久化

出于安全的原因,iOS应用安装的时候为每个APP都分配了独立的目录,APP只能对自己的目录进行操作,这个目录就是沙盒。是苹果提供的一套缓存机制,键值对形式存储,当内存不足时,NSCache会自动清理释放内存,NSCache设置缓存对象数量和占用内存的大小,当缓存超出时自动释放。通过路径重定向,让程序在运行时产生或修改的 plist、文本、图片、图标、媒体等资源文件,不再写入原始位置,而是写入程序自己的目录,从而实现文件隔离和安全管理。可以看到方法的翻译值是一个数组,我们取其中的第一个元素就行。

2501_91546205的博客 429

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

「iOS」————持久化

本篇简单介绍了iOS持久化问题,对于数据的持久化方式有很多,在项目里我们要时刻注意选择合适的方式进行数据持久化。深入学习数据持久化对项目是很有帮助的。

2301_80253909的博客 1371

【iOS】——持久化

因为plist文件不能够保存自定义对象。如果一个字典中保存有自定义对象,如果把这个对象写入到文件当中,它是不会生成 plist文件的。如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复。

m0_73974920的博客 1821

iOS ------ 持久化

另外,Keychain是系统级存储,还可以被iCloud同步,即使App被删除,Keychain数据依然保留,用户下次安装App,可以直接读取,通常会用来存储用户唯一标识串。2Q算法类似于LRU-2,不同点在于2Q将LRU-2算法中的访问历史队列(注意这不是缓存数据的)改为一个FIFO缓存队列,即:2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。仅当数据的访问次数达到K次的时候,才将数据放入缓存。记录用户对数据的访问次数,将访问次数多的数据降序排列在一个容器中,淘汰访问次数最少的数据。

m0_73974056的博客 964

Kingfisher源码分析

Kingfisher源码分析

brycegao321的博客 4894

iOS原生数据存储策略

一 @interface NSCache : NSObject Description A mutable collection you use to temporarily store transient key-value pairs that are subject to eviction when resources are low. Cache objects differ from o...

weixin_34211761的博客 100

Swift并发持久化_swift-actor-persistence

以下为本文档的中文说明swift-actor-persistence 是一个专门为 Swift 语言设计的数据持久化框架技能,利用 Swift 5.5 引入的 Actor 并发模型以编译器级别的保证实现线程安全的数据存储和读取。Swift 的 Actor 模型通过在类型系统层面引入 actor 隔离(Actor Isolation)机制,在编译时就检查和防止数据竞争(Data Race),相较于传统的锁机制(NSLock、os_unfair_lock)或串行队列方案在安全性和性能上都有显著优势。

小青蛙电气 15
上一篇: CGRect 的使用
下一篇: delegate、NSNotification、block三者的比较
For_SHINee
博客等级 码龄16年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值