IOS开发入门之iOS 缓存机制浅析
凌雪 2018-11-09 来源 :网络 阅读 1308 评论 0

摘要:本文将带你了解IOS开发入门iOS 缓存机制浅析,希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门iOS 缓存机制浅析,希望本文对大家学IOS有所帮助。


       

iOS   缓存机制浅析。

1. 基本概念

缓存:   缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

2.   手机缓存的分类

第1种是按需缓存,这种情况下应用缓存起请求应答,就和Web浏览器的工作原理一样;按需缓存技术来改善可感知的性能。以微信为例,打开朋友圈时。应用会获取加载网络请求并填充页面。加载时间线时会看到一个表示正在加载的activityIndicator在旋转。现在进入另一个页面,然后再返回。你会发现这次是瞬间加载的,并且不会显示activityIndicator。如果没有缓存,用户每次打开一个页面都会看到圆圈在旋转。无论网络连接快还是慢,减小网络加载慢的影响,让它看起来很快,是iOS开发者的责任。

第2种是预缓存,这种情况是缓存全部内容(或者最近n条记录)以便离线访问。预缓存更加重视被缓存数据,并且能快速编辑被缓存的记录而无需连接到服务器。如网易新闻,可以先下载下来,在上下班的时候阅读。

3.   缓存原理

1. 按需缓存是指把从服务器获取的内容以某种格式存放在本地文件系统,之后对于每次请求,检查缓存中是否存在这块数据,只有当数据不存在(或者过期)的情况下才从服务器获取。按需缓存可以通过在打开一个视图控制器时按需地缓存数据模型(创建一个数据模型缓存)来实现,也可以在一个URL请求返回成功应答时实现按需缓存(创建一个URL缓存)。

2.   预缓存是把内容放在本地以备将来访问。实现预缓存可能需要一个后台线程访问数据并以有意义的格式保存。

4.   选择使用按需缓存还是预缓存的判断标准

一个简便方法是判断是否需要在下载数据之后处理数据。如果需要对数据进行后期处理,就必须实现预缓存。

5.   存储缓存

缓存数据应该保存在应用程序的沙盒Library/caches文件夹下。我们在Library/caches文件加下建立一个myCache文件夹,以后我们就会将缓存下来的数据存储在这个文件夹下了。

NSArray   *paths =   NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,   YES);

NSString *cachesDirectory = [paths   firstObject];

cachesDirectory = [cachesDirectory   stringByAppendingPathComponent:@"MyCache"];

将数据进行缓存有三种。

第一种数据模型缓存。即序列化和反序列化(又叫归档和反归档)

第二种使用Core   Data   保存数据。

第三种使用SQlite进行保存

第四种URL缓存

按需缓存可以用数据模型缓存或URL缓存来实现。当服务器设计得体,遵循HTTP   1.1的缓存规范时,URL缓存效果最好。如果服务器是SOAP服务器(或者实现类似于RPC服务器或RESTful服务器),就需要用数据模型缓存。

7.   按需缓存控制流程图

以第一种为例   进行预缓存

即在viewWillAppear方法中,查看缓存中是否有显示这个视图所需的数据。如果有就获取数据,然后检查缓存中的数据是否已经过期。如果数据没有过期,则把数据显示在UI上,如果数据已经过期,则从服务器获取数据并更新UI。如果缓存中没有数据,则从服务器获取数据并更新UI,在ViewWillDisappear方法中保存缓存。

-   (void)viewWillAppear:(BOOL)animated

{

[super   viewWillAppear:animated];

NSMutableArray *cachedItems =   [NSKeyedUnarchiver   unarchiveObjectWithFile:ARCHIVEPATH];

self.menuItems =   cachedItems == nil ? [AppDelegate.engine localMenuItems] ? :   cachedItems;

NSDate *modefyDate = [[[NSFileManager defaultManager]attributesOfItemAtPath:[self   filePathWithFileName:@"test"]   error:nil]fileModificationDate];

NSTimeInterval   stalenessLevel = [[NSDate   date]timeIntervalSinceDate:modefyDate];

if(stalenessLevel   > THRESHOLD)

self.menuItems = [AppDelegate.engine   localMenuItems];

[self   updateUI];

}

视图控制器的viewWillDisappear:方法中缓存数据模型的代码片段

-   (void)viewWillDisappear{

[super   viewWillDisappear];

NSArray *paths =   NSSearchPathForDirectoriesInDomains(NSCachesDirectory,

NSUserDomainMask,   YES);

NSString *cachesDirectory = [paths   objectAtIndex:0];

NSString *archivePath = [cachesDirectory   stringByAppendingPathComponent:@"   AppCache/MenuItems.archive"];

[NSKeyedArchiver   archiveRootObject:self.menuItems   toFile:archivePath];

}

    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved