NSURLCache、网络监測状态
有时候。对同一个URL请求多次。返回的数据可能一样的;
比方server上的某张图片。不管下载多少次,返回的数据都是一样的。可是这些情况会造成下面问题:
1,用户流量的浪费。
2。程序响应速度不够快
为了提高程序的响应速度,能够考虑使用缓存(内存缓存\硬盘缓存)
硬盘缓存也是沙盒缓存;
第一次请求数据:
1,client优先会去内存缓存中检測有无缓存;
2,然后再去硬盘缓存中检測有无缓存。
3,再去server请求数据;
当server返回数据时。须要做下面步骤
1,使用server的数据(比方解析、显示)
2,将server的数据缓存到硬盘(沙盒)
此时缓存的情况是: 内存缓存中有数据;
硬盘缓存中有数据。
一、假设程序并没有被关闭,一直在执行:
内存缓存中有数据;硬盘缓存中有数据;
假设再次请求数据,直接使用内存缓存中的数据就可以。
二、假设程序又一次启动
内存缓存已经消失。没有数据; 硬盘缓存依然存在。还有数据;
一旦从硬盘缓存中读取数据,内存缓存中又有数据。
缓存的实现:
1。一般仅仅对GET请求进行缓存,不必对POST请求进行缓存;
GET请求一般用来查询数据。
POST请求通常是发大量数据给server处理(变动性比較大)
2,在IOS中,能够使用NSURLCache类缓存数据:
在IOS5前,仅仅支持
内存缓存;
在IOS開始。
同一时候支持内存缓存和硬盘缓存
3,NSURLCache了解
缓存原理:
一个NSURLRequest相应一个NSCachedURLResponse。在缓存中去找那个请求相应的响应。
缓存技术: 数据库;
缓存GET请求
要想对某个GET请求进行数据缓存,很easy
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.设置缓存策略(有缓存就用缓存。没有缓存就又一次请求)
request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
仅仅要设置了缓存策略,系统会自己主动利用NSURLCache进行数据缓存;
缓存策略:
IOS对NSURLRequest提供了7中缓存策略:(实际上能用的仅仅有4种)
1,NSURLRequestUseProtocolCachePoily //默认的缓存策略(取决于协议)
2。NSURLRequestReloadIgnoringLocalCacheData //忽略缓存,又一次请求;
3,NSURLRequestReloadIgnoringLocalAndRemoteCacheData //未实现
4,NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData ; //忽略缓存,又一次请求;
5,NSURLRequestReturnCacheDataElseLoad //有缓存就用缓存。没有缓存就又一次请求
6,NSURLRequestReturnCacheDataDonLoad //有缓存就用缓存。没有缓存就不发请求,当做请求出错处理(用于离线模式)
7,NSURLRequestReloadRevalidatingCacheData //未实现
NSURLCache几个方法:
取得某个请求的缓存
- (NSCacheURLResponse *)cacheResponseForRequest:(NSURLRequest *)request;
消除某个请求的缓存
- (void)removeCacheReponseForRequest:(NSURLRequest *)request;
消除全部缓存
- (void)removeAllCacheResponses;
缓存的使用注意:
缓存看起来非常美好,但须要慎重使用;
1,假设请求某个URL的返回数据;
常常更新:不能用缓存!
比方股票、彩票数据
一成不变:果断用缓存
偶尔更新:能够定期更改缓存策略 或者清除缓存
2,假设大量使用缓存,会越积越大,
建议定期清除缓存;
#import "HMViewController.h"
#import "Reachability.h"
@interface HMViewController ()
@property (nonatomic, strong) Reachability *conn;
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
self.conn = [Reachability reachabilityForInternetConnection];
[self.conn startNotifier];
}
- (void)dealloc
{
[self.conn stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)networkStateChange
{
[self checkNetworkState];
}
//
用WIFI
// [wifi currentReachabilityStatus] != NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 没实用WIFI,
仅仅用了手机网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 没有网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] == NotReachable
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}
- (void)checkNetworkState
{
// 1.检測wifi状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.检測手机能否上网络(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.推断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) { //
有wifi
NSLog(@"有wifi");
} else if ([conn currentReachabilityStatus] != NotReachable) { //
没有使用wifi,
使用手机自带网络进行上网
NSLog(@"使用手机自带网络进行上网");
} else { //
没有网络
NSLog(@"没有网络");
}
}
@end
NSURLCache、网络监測状态的更多相关文章
- Android实践--监測网络状态
Android 监測网络状态 我们在使用Android手机时候,一些APP须要网络环境才干执行,所以手机须要可用的网络,无论是2G.3G或者WIFI.甚至有一些比較耗流量的APP仅仅能在WI ...
- 网络状态监測之 Reachability的使用
先下载 Reachability开源库地址: (一)git hub: https://github.com/tonymillion/Reachability (二)我自己改动的:http://down ...
- 使用NDIS驱动监測以太网络活动
转载自: http://blog.csdn.net/ddtpower/article/details/656687 本论文提供了NDIS的主要的理解,应用程序怎样与驱动程序交互.发挥驱动程序最佳性 ...
- 使用HTML5监測站点性能
在这个信息爆炸的互联网时代,越来越多的人缺少了等待的耐心.站点性能对于一个站点来说越来越重要.下面为监控到的站点打开时间对跳出率的影响: 当站点打开时间在0-1秒时,跳出率为12% 当站点打开时间在1 ...
- Oracle 网络监听配置管理
Oracle 网络配置与管理 详细信息可以参考以下信息: [学习目标] 一.原理解析 二.配置侦听器(LISTENER) 三.配置客户端网络服务名 四.关于注册 五.查询某服务是静态还是动态注册 Or ...
- 从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 基于Unity3D云人脸监測技术
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师.CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- iOS:Reachability网络监听
iOS利用Reachability确认网络环境3G/WIFI 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的,一般情况下,可以把网络监 ...
- Atitit.软件仪表盘(4)--db数据库子系统-监測
Atitit.软件仪表盘(4)--db数据库子系统-监測 连接数::: 死锁表列表:死锁基础列表(近期几条记录,时间,sql等) 3.对server进行监控.获取CUP.I/O使用情况 4.对数据 ...
随机推荐
- iText、poi操作word2007(读取,生成)
关于生成word文件以及插入文字.表格.图片等功能,我使用了poi和itext,因为poi插入图片的jar包我在网上查并不是太完全,也可能我没找到如何使用,所以插入图片我用的是itext iText所 ...
- 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] A】Paper Airplanes
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 统计每个人需要的sheet个数. 乘上k 然后除p就是需要的pack个数了 [代码] #include <bits/stdc+ ...
- jvm 虚拟机参数_栈内存分配
1.参数 -Xss 指定线程最大的栈空间,整个参数也直接决定了函数可调用的最大深度 2.测试代码 private static int count; public static void addCou ...
- URAL 1517 Freedom of Choice
Freedom of Choice Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on Ural. Orig ...
- 不用while if 循环求 1到n的和,还用到了!!这样的运算符
很好的题目.开始我也没有想出来. 不用while if 循环求 1到n的和 给了很多种解法,第一种是构造函数,然后累加static变量 第二种是虚函数,有父类子类,父类的结束,然后用 !!n来让 n不 ...
- CSS3弹性布局内容对齐(justify-content)属性使用具体解释
内容对齐(justify-content)属性应用在弹性容器上.把弹性项沿着弹性容器的主轴线(main axis)对齐. 该操作发生在弹性长度以及自己主动边距被确定后. 它用来在存在剩余空间时怎样加以 ...
- 带你认识 MySQL 之 MySQL 体系结构
序 近期一直在忙项目,各种加班加点,项目上线.渐渐的没有了学习的时间.这不,刚这几天才干抽出点时间.忙里偷闲,正在看一本数据库的书籍.相信非常多小伙伴们也都看过 - - <MySQL 技术内幕: ...
- Android中文API-ViewStub
ViewStub控件是一个不可见,0尺寸得惰性控件.当ViewStub控件设置可见,或者调用inflate(),并运行完毕之后,ViewStub所指定的layout资源就会被载入.这个ViewStub ...
- 基于One-Class的矩阵分解方法
在矩阵分解中. 有类问题比較常见,即矩阵的元素仅仅有0和1. 相应实际应用中的场景是:用户对新闻的点击情况,对某些物品的购买情况等. 基于graphchi里面的矩阵分解结果不太理想.调研了下相关的文献 ...
- 利用wget 抓取 网站网页 包括css背景图片
利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...