iOS - LocalCache 本地数据缓存

1、自定义方式本地数据缓存

1.1 自定义缓存 1

  • 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视频文件等。该目录中的文件系统不会自动删除,可以做离线访问。它的存放时间比 tmp 下的长,但是不如 Library 下的其它目录。总的来说 Caches 目录下存放的数据不能是应用程序运行所必需的,但是能提高应用访问性能的。可写入应用支持文件,保存应用程序再次启动需要的信息。iTunes 不会对这个目录的内容进行备份。要求程序员必需提供一个完善的清除缓存目录的 "解决方案"。

  • Objective-C

        // 写缓存- (void)writeLocalCacheData:(NSData *)data withKey:(NSString *)key {// 设置存储路径NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判读缓存数据是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 删除旧的缓存数据[[NSFileManager defaultManager] removeItemAtPath:cachesPath error:nil];}// 存储新的缓存数据[data writeToFile:cachesPath atomically:YES];}// 读缓存- (NSData *)readLocalCacheDataWithKey:(NSString *)key {NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判读缓存数据是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 读取缓存数据return [NSData dataWithContentsOfFile:cachesPath];}return nil;}// 删缓存- (void)deleteLocalCacheDataWithKey:(NSString *)key {NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判读缓存数据是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 删除缓存数据[[NSFileManager defaultManager] removeItemAtPath:cachesPath error:nil];}}
  • Swift

        // 写缓存func writeLocalCacheData(data:NSData, withKey key:String) {// 设置存储路径let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判读缓存数据是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 删除旧的缓存数据try! NSFileManager.defaultManager().removeItemAtPath(cachesPath)}// 存储新的缓存数据data.writeToFile(cachesPath, atomically: true)}// 读缓存func readLocalCacheDataWithKey(key:String) -> NSData? {let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判读缓存数据是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 读取缓存数据return NSData(contentsOfFile: cachesPath)}return nil}// 删缓存func deleteLocalCacheDataWithKey(key:String) {let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判读缓存数据是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 删除缓存数据try! NSFileManager.defaultManager().removeItemAtPath(cachesPath)}}

1.2 自定义缓存 2

  • 沙盒路径下的 Library/Preferences 常用来放置配置文件、数据文件、模板等应用在运行中与用户相关,而又希望对用户不可见的文件,如系统偏好设置,用户偏好设置等文件。使用 NSUserDefaults 类进行偏好设置文件的创建、读取和修改。

  • Objective-C

        // 写缓存- (void)saveCacheData:(NSData *)data withType:(int)type andID:(int)_id {NSUserDefaults *setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];[setting setObject:data forKey:key];[setting synchronize];}// 读缓存- (NSData *)getCacheDataWithType:(int)type andID:(int)_id {NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];return [setting objectForKey:key];}// 删缓存- (void)removeCacheDataWith:(int)type andID:(int)_id {NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];[setting removeObjectForKey:key];[setting synchronize];}
  • Swift

        // 写缓存func saveCacheData(data:NSData, withType type:Int, andID _id:Int) {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)setting.setObject(data, forKey: key)setting.synchronize()}// 读缓存func getCacheDataWithType(type:Int, andID _id:Int) -> NSData? {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)return setting.objectForKey(key) as? NSData}// 删缓存func removeCacheDataWithType(type:Int, andID _id:Int) {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)setting.removeObjectForKey(key)setting.synchronize()}   

2、EGOCache 方式本地数据缓存

  • EGOCache 一个简单、线程安全的基于 key-value 的缓存框架,原生支持 NSString、UI/NSImage、和 NSData,也支持储存任何实现 <NSCoding> 协议的类。
  • EGOCache 只有一个类,并且为单例类,只有 EGOCache.h 和 EGOCache.m 两个文件。
  • EGOCache 只提供了磁盘缓存,没有提供内存缓存,同时,也提供了清理缓存的方法。
  • EGOCache 可以设定缓存过期时间,默认是 1 天,过期的缓存在创建 EGOCache 对象时会被删除。

2.1 添加 EGOCache

  • Github 网址:https://github.com/enormego/EGOCache

  • EGOCache 使用 ARC

  • Objective-C

        // 添加第三方库文件EGOCache-2.1.3// 包含头文件#import "EGOCache.h"
  • Swift

        // 添加第三方库文件EGOCache-2.1.3// 创建名为 “项目名-Bridging-Header.h” 的桥接头文件,如:SwiftLocalCache-Bridging-Header.h// 在 TARGETS -> Build Setting -> Swift Compiler - Code generation -> Objective-C Bridging Header 中// 添加 “项目名/项目名-Bridging-Header.h” 路径,如:SwiftLocalCache/SwiftLocalCache-Bridging-Header.h// 在创建的桥接头文件中包含头文件#import "EGOCache.h"

2.2 EGOCache 缓存

  • Objective-C

        // 判断缓存数据是否存在BOOL hasLocalCache = [[EGOCache globalCache] hasCacheForKey:@"qqCache"];// 读取缓存数据NSData *localData = [[EGOCache globalCache] dataForKey:@"qqCache"];// 存储缓存数据[[EGOCache globalCache] setData:data forKey:@"qqCache"];
  • Swift

        // 判断缓存数据是否存在let hasLocalCache = EGOCache.globalCache().hasCacheForKey("qqCache")// 读取缓存数据let localData = EGOCache.globalCache().dataForKey("qqCache")// 存储缓存数据EGOCache.globalCache().setData(data, forKey: "qqCache")

2.3 EGOCache 属性方法

  • 判断缓存数据是否存在方法

        // 判断指定缓存的数据是否存在- (BOOL)hasCacheForKey:(NSString* __nonnull)key;
  • 存储缓存数据方法

        // 存储 NSData 型数据- (void)setData:(NSData* __nonnull)data forKey:(NSString* __nonnull)key;- (void)setData:(NSData* __nonnull)data forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存储 NSString 型数据- (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key;- (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存储 UIImage 型数据- (void)setImage:(UIImage* __nonnull)anImage forKey:(NSString* __nonnull)key;- (void)setImage:(UIImage* __nonnull)anImage forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存储 PList 型数据- (void)setPlist:(nonnull id)plistObject forKey:(NSString* __nonnull)key;- (void)setPlist:(nonnull id)plistObject forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存储 OBject 型数据- (void)setObject:(nonnull id<NSCoding>)anObject forKey:(NSString* __nonnull)key;- (void)setObject:(nonnull id<NSCoding>)anObject forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;
  • 读取缓存数据方法

        // 读取 NSData 型缓存数据- (NSData* __nullable)dataForKey:(NSString* __nonnull)key;// 读取 NSString 型缓存数据- (NSString* __nullable)stringForKey:(NSString* __nonnull)key;// 读取 UIImage 型缓存数据- (UIImage* __nullable)imageForKey:(NSString* __nonnull)key;// 读取 PList 型缓存数据- (NSData* __nullable)plistForKey:(NSString* __nonnull)key;// 读取 OBject 型缓存数据- (nullable id<NSCoding>)objectForKey:(NSString* __nonnull)key;
  • 复制缓存数据方法

        // 复制指定缓存数据 - (void)copyFilePath:(NSString* __nonnull)filePath asKey:(NSString* __nonnull)key;- (void)copyFilePath:(NSString* __nonnull)filePath asKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;
  • 清除缓存数据方法

        // 清除全部缓存数据- (void)clearCache;// 清除指定缓存的数据- (void)removeCacheForKey:(NSString* __nonnull)key;
  • 读取缓存信息方法

        // 获取指定缓存的缓存时间- (NSDate* __nullable)dateForKey:(NSString* __nonnull)key;// 获取所有缓存的 key 值- (NSArray* __nonnull)allKeys;
  • 创建缓存对象方法

        // 这种方法创建的缓存对象不是单例类,可以自己设置缓存路径- (nonnull instancetype)initWithCacheDirectory:(NSString* __nonnull)cacheDirectory;
  • 缓存时间属性

        // Default is 1 day@property(nonatomic) NSTimeInterval defaultTimeoutInterval;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何构建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中将构建一个小示例&#xff0c;用于演示在ASP.NET MVC4项目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步骤&#xff1a; 1&#xff0c;添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如…

echarts 有引导线和内部文字_点、线、面构图的异同以及相互转化

点、线、面构图既有相似性&#xff0c;又有差异性。相似的是都有对齐、强调、群组、重复、突出层次的作用&#xff0c;不同的是点的特点是聚焦、线的特点是运动和方向性&#xff0c;面的特性是体量感、稳定性。点的情感最弱&#xff0c;线、面的情感要比点丰富。一、点、线、面…

c语言上机报告之水仙花数,C语言上机报告之水仙花数..doc

C语言上机报告之水仙花数.C语言程序设计上机报告课题名称&#xff1a;水仙花数的算法院 (系)&#xff1a;工程学院专业班 级&#xff1a; 052126学生姓名&#xff1a; 喻培学 号&#xff1a; 20121004040指导教师&#xff1a; 熊慕舟2013年11月24日C语言上机报告之水仙花数上机…

《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

Web的套接字函数库&#xff1a;urllib2 一开始以urllib2.py命名脚本&#xff0c;在Sublime Text中运行会出错&#xff0c;纠错后发现是重名了&#xff0c;改过来就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文档

文档目的能够使用vCenter Converter Standalone 将物理机操作系统迁移到虚拟机操作系统基础知识vCenter Converter Standalone 能将物理机上的操作系统、VMware虚拟机上的操作系统或者Hype-V 上的虚拟机操作系统迁移到VMware上。系统环境操作系统&#xff1a;Windows Server 20…

1093芯片做正弦波逆变器_正弦波逆变器中的SPWM调制(钟任生)

欢迎加入技术交流QQ群(2000人)&#xff1a;电力电子技术与新能源 905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验&#xff0c;欢迎关注我们&#xff0c;搜索微信公众号&#xff1a;电力电子技术…

android 手机短信恢复,安卓手机短信删除了怎么恢复?简单恢复的方法

原标题&#xff1a;安卓手机短信删除了怎么恢复&#xff1f;简单恢复的方法安卓手机短信删除了怎么恢复&#xff1f;手机短信是生活中不经常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因为我们现在比较喜欢用社交软件与别人进行交流&#xff0c;但是在一些相对重…

Oracle-查看oracle是否有表被锁

问题现象&#xff1a; 查看oracle是否有表被锁 解决方法&#xff1a; select sid,serial#,program,terminal,username,b.object_id,c.object_name from v$session a, v$locked_object b, dba_objects c where a.sid b.session_id and b.object_id c.object_id;转载于:http…

Python循环的一些基本练习

#1:# name input(请输入你的身份)# if name egon:# print(--> 超级管理员)# elif name tom:# print(--> 普通管理员)# elif name jack,rain:# print(--> 业务主管)# elif name 其他:# print(--> 普通用户)#2# today input(今天是星期几&…

bash下个人习惯的一些文件设置

2019独角兽企业重金招聘Python工程师标准>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言1、本文主要内容将在项目中实际使用到的相关东西整理记录一波&#xff0c;同时可以方便其他同学在使用到的时候参考一下(自己也备忘)&#xff0c;有不对的地方&#xff0c;欢迎指出~~Docker部署SpringBoot 项目通用Dockerfile文件、脚本Jenkins新建任务图文详解3、本文…

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时&#xff0c;有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器&#xff0c;来提示用户有短信收到或者处理短信&#xff0c;就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…

android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

在android中&#xff0c;常常会和输入法的软件键盘交互。在Manifest文件中&#xff0c;系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式。该属性提供了Activity的window与软键盘的window交互的方式。这里的属性设置有双方面的影响&#xff1a;1.软键盘的显…

天才基本法_《天才基本法》强推!年度神仙小说,看完这本书我竟然爱上了数学...

《天才基本法》——长洱小说文案元宝的书评这个真的是本年度的神仙小说&#xff0c;讲述了女主回到少女时代&#xff0c;可以和他一直暗恋的数学天才重来一遍。女主让男主改变了觉得她碌碌无为的看法&#xff0c;也改变了自己的人生。本书最大的主角其实是数学&#xff01;天知…

dataTables插件使用

引用文件 <!-- DataTables CSS --> <link rel"stylesheet" type"text/css" href"http://cdn.datatables.net/1.10.7/css/jquery.dataTables.css"><!-- jQuery --> <script type"text/javascript" charset"u…

一行代码,发送邮件

朋友让我给他媳妇儿肚子里的孩子想个名字 走的越来越快了&#xff0c;有天看到一个论点关于说地域会影响人的一辈子。其实想想的确有这个理儿&#xff0c;这使我想起来每天早上挤地铁的时候&#xff0c;其中有一个A站的人总是特别彪悍的往里挤&#xff0c;但B站的人就是永远不会…

js call,apply,bind三个方法的区别

相同点&#xff1a; 都是能够改变this的指向 不同点&#xff1a; 1.call()&#xff1a;传参方式跟bind一样&#xff08;都是以逗号隔开的传参方式&#xff09;&#xff0c;但是跟apply&#xff08;以数组的形式传参&#xff09;不一样&#xff0c; 2.bind(): 此方法应用后的情形…

千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...

鸿蒙&#xff0c;是一个汉语词语&#xff0c;亦作“鸿濛”。中国神话传说的远古时代&#xff0c;传说在盘古开天辟地之前&#xff0c;世界是一团混沌状&#xff0c;因此把那个时代称作鸿蒙时代&#xff0c;后来该词也常被用来泛指远古时代。引证解释亦作“鸿濛”。1、宇宙形成前…

python中调用万年历_python 打印万年历

题目&#xff1a;打印万年历已知条件闰年条件&#xff1a;能被4整除且不能被100整除&#xff0c;或者能被400整除1900年1月1日 是周一解题思路判断闰年;判断当月有多少天;这个月的1号是从周几开始的;格式化打印日历。解题代码#判断年份是否为闰年def is_leap_year(year):if (ye…

求水仙花数

求出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。 1 /**2 * 题目&#xff1a;打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方…