iOS开发缓存机制之—内存缓存机制

在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。
这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。
内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。
1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。
2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。
3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。
4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式;
5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
6、NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
NSURLCache还提供了很多方法,来方便我们实现应用程序的缓存机制。下面我通过一个例子来说明,这个例子减少我们对同一个url多次请求。看下面代码:
-(IBAction) buttonPress:(id) sender
{
NSString *paramURLAsString= @”http://www.baidu.com/”;
if ([paramURLAsString length] == 0){
NSLog(@”Nil or empty URL is given”);
return;
}
NSURLCache *urlCache = [NSURLCache sharedURLCache];
/* 设置缓存的大小为1M*/
[urlCache setMemoryCapacity:1*1024*1024];
//创建一个nsurl
NSURL *url = [NSURL URLWithString:paramURLAsString];
//创建一个请求
NSMutableURLRequest *request =
[NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0f];
//从请求中获取缓存输出
NSCachedURLResponse *response =
[urlCache cachedResponseForRequest:request];
//判断是否有缓存
if (response != nil){
NSLog(@”如果有缓存输出,从缓存中获取数据”);
[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
}
self.connection = nil;
/* 创建NSURLConnection*/
NSURLConnection *newConnection =
[[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];
self.connection = newConnection;
[newConnection release];
}
这个例子中,我们请求url为www.baidu.com的网站。如果这个url被缓存了,我们直接从缓存中获取数据,否则从www.baidu.com站点上重新获取数据。我们设置了缓存大小为1M。
使用下面代码,我将请求的过程打印出来:
- (void)  connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response{
NSLog(@”将接收输出”);
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse{
NSLog(@”即将发送请求”);
return(request);
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data{
NSLog(@”接受数据”);
NSLog(@”数据长度为 = %lu”, (unsigned long)[data length]);
}
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse{
NSLog(@”将缓存输出”);
return(cachedResponse);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@”请求完成”);
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error{
NSLog(@”请求失败”);
}
当我们第一次点击界面上的按钮,打印的结果如下:
2011-07-30 18:50:24.910 Caching[3971:207] 即将发送请求
2011-07-30 18:50:28.557 Caching[3971:207] 将接收输出
2011-07-30 18:50:31.677 Caching[3971:207] 接受数据
2011-07-30 18:50:31.681 Caching[3971:207] 数据长度为 = 4414
2011-07-30 18:50:31.682 Caching[3971:207] 接受数据
2011-07-30 18:50:31.682 Caching[3971:207] 数据长度为 = 2996
2011-07-30 18:50:38.107 Caching[3971:207] 将缓存输出
2011-07-30 18:50:38.109 Caching[3971:207] 请求完成
在看我们第二次点击界面上的按钮,打印结果如下:
2011-07-30 18:5:18.894 Caching[3971:207] 即将发送请求
2011-07-30 18:52:18.895 Caching[3971:207] 将接收输出
2011-07-30 18:52:18.895 Caching[3971:207] 接受数据
2011-07-30 18:52:18.896 Caching[3971:207] 数据长度为 = 7410
2011-07-30 18:52:18.896 Caching[3971:207] 请求完成
我们看到没有“将缓存输出”一项,请求到的数据是第一次请求的累积,也就是第二次是从内存中获取数据的。
转自iOS分享网 http://iosshare.cn

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

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

相关文章

云计算机教室怎么布线,云和县实验小学计算机教室综合布线及计算机安装预算方案.doc...

云和县实验小学计算机教室综合布线及计算机安装预算方案.doc (2页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!17.90 积分云和县教育装备和勤工俭学办公室计算机教室改造工程参数设备名…

循环造数据_项目管理数据与信息--DIKW模型

开头的话在PMP中,有一块内容是“项目管理数据与信息:工作绩效数据(Work Performance Data),工作绩效信息(Work Performance Information),工作绩效报告(Work Performance…

基于C语言Ncurse库和链表的简单贪吃蛇小游戏

参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44234294/article/details/108829135?spm1001.2014.3001.5501 Ncurses库相关介绍 ncurse…

C 内存分配【转】

c 内存分配 1、程序代码区:存放函数体的二进制代码。 2、全局区数据区:全局数据区划分为三个区域。 全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。常量数…

计算机中求某学校班级人数,计算机1级的计算题

计算题:1、现有一张某班级期末总成绩表(如上图),其中平均分为数学、英语、计算机基础三门课程的平均值,实际分数由平均分与平时成绩按一定比率相加所得,其中平均分占实际分数的百分比写在D7单元格中,平时成绩占实际分数的百分比写…

android刷新时的圆形动画_【Android】圆形揭露动画

在Android系统中提供了一种圆形的揭露动画,具体表现为一个view以圆形的形式展开、揭示。所谓揭露动画,就是一种用于 View 之间,甚至界面之间的特殊过渡动画效果。通过ViewAnimationUtils.createCircularReveal方法可以创建一个RevealAnimator…

jQuery_基本选择器

#id 概述&#xff1a; 根据给定的ID匹配一个元素 使用任何的元字符作为名称的文本部分&#xff0c;它必须被两个反斜杠转义&#xff1a;// 查找含有特定字符的元素 HTML 代码: <div id"notMe"><p>id"notMe"</p></div> <div id&…

STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结

摘自&#xff1a;STM32F103五分钟入门系列&#xff08;一&#xff09;跑马灯&#xff08;库函数寄存器&#xff09;加编程模板GPIO总结 作者&#xff1a;自信且爱笑‘ 发布时间&#xff1a; 2021-04-28 21:17:40 网址&#xff1a;https://blog.csdn.net/Curnane0_0/article/det…

使用date命令来修改系统日期与时间

大多数情况下&#xff0c;我们只用date命令来输出不同格式的系统时间&#xff0c;但是很少用它来修改系统时间&#xff0c;因为ntp帮我们更好的解决了时间同步的问题&#xff0c;但是在未联网的终端环境里&#xff0c;偶尔还是用得着它的~ 1. 只修改日期 # date -s 2011-08-12…

计算机没有程序,计算机小知识:想尝试写程序却没有电脑?这个在线编辑器满足你...

大家好&#xff0c;我是零一&#xff0c;昨天的文章《计算机小知识&#xff1a;手把手教你写出自己的第一个程序&#xff1a;Hello World》发表后&#xff0c;没几分钟就有小伙伴问我&#xff0c;没有电脑&#xff0c;但是真的很想尝试去学习一下编程&#xff0c;应该怎么办&am…

微信小程序时间戳的转换及调用

13位 的时间戳&#xff0c;如下图&#xff1a; 效果图: 1.(utils.js里面的代码): function formatTime(timestamp, format) {const formateArr [Y, M, D, h, m, s];let returnArr [];let date new Date(timestamp); //13位的时间戳, 如果不是13位的, 就要乘1000,就像这样…

地壳中元素含量排名记忆口诀_地壳中含量最多的元素是什么?地壳中元素含量排名口诀...

地壳&#xff0c;乃地质术语&#xff0c;是指由岩石组成的固体地壳&#xff0c;是地球固体圈的最外层&#xff0c;也是岩石圈的重要组成部分。那么地壳中含量最多的元素是什么呢&#xff1f;以及地壳中元素含量排名口诀又是什么呢&#xff1f;地壳中含量最多的元素从地震波的研…

基于Wemos D1的感应开盖垃圾桶

参考&#xff1a;基于Wemos D1的感应开盖垃圾桶&#xff08;增加自己的代码实现部分&#xff09; 作者&#xff1a;LEO-max 发布时间&#xff1a;2020-12-29 15:21:26 网址&#xff1a;https://blog.csdn.net/zouchengzhi1021/article/details/111880104?spm1001.2014.3001.55…

电脑计算机主板不启动,电脑主板不能启动的解决方法

电脑主板不能启动的解决方法主板又称主机板、系统板、逻辑板、母板、底板等&#xff0c;是构成复杂电子系统例如电子计算机的中心或者主电路板。下面给大家介绍电脑主板不能启动的解决方法&#xff0c;欢迎阅读!电脑主板不能启动的解决方法电脑主板不能启动的解决方法一&#x…

ntop网络监控-安装配置指南

一、源码安装ntop 1、安装所需的库 yum -y install libpcap libpcap-devel libpng gdbm gdbm-devel glib libxml2-devel pango pango-devel gd 2、下载最新稳定版的ntopwget http://sourceforge.net/projects/ntop/files/ntop/Stable/ntop-4.1.0.tar.gz 解压与安装 tar zxf n…

WEB前端 CSS(非布局)

目录 WEB前端 CSSCSS引入方式CSS结构CSS选择器直接选择器组合选择器分组选择器 也叫并集选择器属性选择器伪类选择器伪元素选择器CSS选择器是一个查找的过程&#xff0c;高效的查找影响页面加载的效率CSS选择器的优先级CSS声明CSS非布局声明CSS布局声明除了css 对样式有影响&am…

mysql 从库 速度太慢_mysql查询速度慢的原因[整理版]

在以前的博客中陆续记录了有关查询效率方面的文章。今天在整理一下&#xff0c;写上自己的一些心得记录如下&#xff1a;常见查询慢的原因常见的话会有如下几种&#xff1a;1、没有索引或没有用到索引。PS&#xff1a;索引用来快速地寻找那些具有特定值的记录&#xff0c;所有M…

智能家居(工厂模式)

摘自&#xff1a;智能家居 作者&#xff1a;LEO-max 发布时间&#xff1a; 2021-03-05 00:38:07 网址&#xff1a;https://blog.csdn.net/zouchengzhi1021/article/details/114375529?spm1001.2014.3001.5502 目录 主流程设计框架及某一功能框架编写InputCommand.h框架contrlD…

计算机应用基础0006 19秋在线作业2,川大《计算机应用基础0006》13春在线作业2

计算机,建筑工程川大《计算机应用基础0006》13春在线作业214春13秋都有 试卷总分&#xff1a;100 测试时间&#xff1a;--单选题、单选题(共 50 道试题&#xff0c;共 100 分。)1. 在Windows资源管理器中&#xff0c;要把图标设置成缩略图方式&#xff0c;应在下面哪组菜单中设…

【c++基础】vector中按照Point类型某一个变量进行排序

code // sort(a.begin(), a.end(), cmpy);//subfunction bool cmpy(cv::Point const& a, cv::Point const& b) {return a.y < b.y; } 完转载于:https://www.cnblogs.com/happyamyhope/p/9269457.html