iOS-ASIHTTPRequest缓存机制
第三方网络请求库
* 我们在对网络请求的时候,可以使用系统为我们提供的NSURLRequest和NSURLConnection,它基本能实现我们的基本功能。
* 但是有时我们使用第三方封装的库,可以轻易实现使用系统方法比较难以实现的功能。
* 常见的第三方库有:ASIHTTPRequest, AFNetworking, MKNetworkKit.
- ASIHTTPRequest:http://allseeing-i.com/ASIHTTPRequest/
- AFNETworking:https://github.com/AFNetworking/AFNetworking
- MKNetworkKit:https://github.com/MugunthKumar/MKNetworkKit
* 关于第三方库基本使用,官网上都有详细的介绍。
* 今天就以ASIHTTPRequest为例,实现数据的本地缓存。
为什么使用本地缓存?
* 最通俗易懂的解释就是用户体验。
* 在没用网络的情况下,可以访问以前访问过得数据。
* 访问的数据,如果缓存中有数据,不用向服务器发送请求,可以节省用户的流量。
ASIHTTPRequest缓存机制
这幅图中的信息是通过网络请求获取的,如果在下次打开这个APP的时候没用网络,我们还想将上面的数据显示出来,就是得使用缓存机制,缓存机制是怎么实现的呢?
缓存的基本原理:
* 建立一个缓存区域,设置缓存路径,设置缓存策略。
* 在网络请求的时候设置为下载缓存。缓存的数据会存储到指定位置,我们可以根据缓存策略读取缓存数据。
注意:
- 在使用ASIHTTPRequest的时候,我们首先要将这个第三方类库添加到我们的项目中。
- 我们要将相应的框架添加到文件中
- 这个类库,不支持ARC,如果你在ARC下,需要设置相关信息。打开:target-》Build Phases=>Compile Sources. 双击对应的 .m文件。在弹出的框中输入-fno-objc-arc.
下面的代码大概意思是:
建立缓存类;设置缓存路径;设置缓存策略(后面详述);将缓存类赋给一个属性;
ASIDownloadCache *cache = [[ASIDownloadCache alloc]init];
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"CacheFiled"];
[cache setStoragePath:filePath];
[cache setDefaultCachePolicy:ASIAskServerIfModifiedCachePolicy |ASIFallbackToCacheIfLoadFailsCachePolicy];
[self setMyCache:cache];
下一步我们就可以发起请求了:
请求路径;请求的数据设置缓存;存储策略(后面讲述);发起请求;获取请求的数据;
NSURL *url = [NSURL URLWithString:@"http://apis.juhe.cn/cook/query?key=c84890ed990675f3c454cb2e86fc0a75&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3"];
ASIHTTPRequest *request = [[ASIHTTPRequest alloc]initWithURL:url];
[request setDownloadCache:[self myCache]];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[request startSynchronous];
NSData *data = request.responseData;
缓存策略和存储策略
缓存策略,存储策略,见名知意,就是缓存是采取的策略和存储是采取的策略。
比如使用缓存的时候,是先读取缓存,还是先请求网路,还是网络读取失败后读取缓存。
存储策略是采取临时性存储,还是永久性存储。
下面的这张图记录了ASI的缓存策略,多种缓存策略可以配合使用,例如上面的代码的缓存策略就是配合着使用的,先向服务器请求数据,失败后加载本地缓存。
关于存储策略:大概分为两种
iOS-ASIHTTPRequest缓存机制的更多相关文章
- iOS网络缓存机制
iOS的网络引擎自带缓存机制: 网络请求在经过网络引擎时有过处理(添加了字段),所以用api的网络请求无法获取缓存. [NSURLCache sharedURLCache]
- IOS开发缓存机制之—本地缓存机制
功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这 ...
- 关于iOS URL缓存机制原理解析
关于URL缓存机制中 利用request对象判断是否缓存 其实request是否相等的判断依据是URLString是否相等
- iOS笔记-(缓存机制的理解与实现)
(1)运行中的现象: 在iOS开发中,会遇到:同一NSURL被多次请求,会造成用户的流量浪费,程序的响应速度不够快.比如说,从服务器上请求一张图片,请求100次,下载的结果都是一样的. (2)解决方法 ...
- IOS缓存机制详解
资料均来自互联网,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 人魔七七:http://www.cnblogs.com/qiqibo/ 为什么要有缓存 应用需要 ...
- 【转】IOS缓存机制详解
人魔七七:http://www.cnblogs.com/qiqibo/ 为什么要有缓存 应用需要离线工作的主要原因就是改善应用所表现出的性能.将应用内容缓存起来就可以支持离线.我们可以用两种不同的缓存 ...
- IOS - 开发之内存缓存机制
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...
- iOS开发之内存缓存机制
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...
- 详解iOS多图下载的缓存机制
1. 需求点是什么? 这里所说的多图下载,就是要在tableview的每一个cell里显示一张图片,而且这些图片都需要从网上下载. 2. 容易遇到的问题 如果不知道或不使用异步操作和缓存机制,那么写出 ...
随机推荐
- idea前后端分离搭建 JavaWeb项目
我们小组在开发的时候, 承诺了前后端分离, 那么就要求前端和后端需要分开搭建. 不能同时放在一个工程项目中. 大致的思路是开启两个Tomcat, 一个跑前端页面, 一个跑后端程序. 1. idea打开 ...
- C09 指针
目录 指针相关概念 指针变量 null指针 指针的算术运算 指针数组 指向指针的指针 传递指针给函数 从函数返回指针 指针相关概念 变量 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个 ...
- Url Rewrite 重写
前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索 ...
- LiteIDE 错误: go build xxxxxx: no non-test Go files in xxxx
问题 c:/go/bin/go.exe build [C:/Users/Administrator/Desktop/go] go build _/C_/Users/Administrator/Desk ...
- redis的一个bug
清楚redis缓存的时候,出现以下问题: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not ...
- js cookie 操作
<html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...
- python hashlib模块学习
目录 hashlib 模块 破解密码 hmac 模块 hashlib 模块 1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,我们原来接触的是计算机语言0和1然后转化成字符,而hashl ...
- 1036: [ZJOI2008]树的统计Count(树链剖分)
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 19830 Solved: 8067[Submit ...
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- mysql中的存储引擎
MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修 ...