数据缓存
定义
有时候,对于同一个URL进行多次请求,返回的数据可能都是一样的,这样会造成一个资源浪费,影响性能的问题。对此我们需要对数据进行缓存
实现
描述
缓存有两种,内存缓存或者硬盘缓存
过程:
第一次返回数据时,需要以下的步骤
1.使用服务器的数据
2.将服务器数据缓存到硬盘
如果再次请求数据的时候分两种情况:
1.程序没有关闭,内存缓存中一直有数据,这个时候直接使用内存缓存数据即可
2.程序关闭再重新开启,内存数据已经消失,这个时候就用到硬盘数据
具体实现
在iOS中,我们可以是有NSURLCache类来缓存数据
缓存原理:一个NSURLRequest对应一个NSCacheURLRequest
缓存技术:把缓存数据保存到数据库中。
NSURLCache常见用法
1.获得全局缓存对象NSURLCache *cache = [NSURLCache sharedURLCache];
2.设置内存缓存的最大容量(字节为单位,默认512KB)
-(void)setMemoryCapacity:(NSUInteger)memoryCapacity;
3.设置硬盘缓存最大容量(字节为单位,默认10M)
-(void)setDiskCapacity:(NSUInteger)diskCapacity;
4.获取缓存位置:沙盒/Library/Cache
5.取得某个请求的缓存
-(NSCacheURLResponse )cacheResponseForRequest:(NSURLRequet )request;
6.清楚某个请求的缓存
-(void)removeCachedResponseForRequest:(NSURLRequest *)request’
7.清楚所有缓存
-(void)removeALLCachedResponses;
缓存GET请求
NSMutableURLRequest *request = [NSMutableRequest requestWithURL:url];
request.cachePolicy = NSURLRequestReturnCacheDataElseLoad
//只要设置了缓存策略,系统会自动利用NSURLCache进行数据缓存
iOS对NSURLRequest提供了7中缓存策略
1.NSURLRequestUseProtocolCachePolicy//默认缓存策略(取决于协议)
2.NSURLRequestReloadIgnoringLocalCacheData//忽略缓存,重新请求
3.NSURLRequestReLoadIgnoringLocalAndRemoteCacheData//未实现
4.NSURLRequestReloadIgnoringCacheData//忽略缓存,重新请求
5.NSURLRequestReturnCacheDataElseLoad//有缓存就用缓存,没有就重新请求
6.NSURLRequestReturnCacheDataDontLoad//有缓存就用缓存,没有的就不发送请求,当作出错处理(用于离线模式)
7.NSURLRequestReloadRevalidatingCacheData//未实现
缓存注意事项
缓存的设置需要根据具体情况考虑,如果请求的数据
1.经常更新:不能使用缓存
2.一成不变:果断使用缓存
3.偶尔缓存:可以定期更新缓存策略,或者清楚缓存
提示:如果大量使用缓存,建议定期清除缓存
//创建请求
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8080/YYServer/video"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//设置缓存策略
request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
//发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@",dic);
}
}];