59网站一起做网店,网络营销的常用工具,海外网红营销,中国建筑装饰网公众号在IOS应用程序开发中#xff0c;为了减少与服务端的交互次数#xff0c;加快用户的响应速度#xff0c;一般都会在iOS设备中加一个缓存的机制。这篇文章将介绍一下如何在iOS设备中进行缓存#xff0c;本文先介绍一下将内容缓存到内存中#xff0c;下一篇文章就介绍一下在i…在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];//创建一个nsurlNSURL *url [NSURL URLWithString:paramURLAsString];//创建一个请求NSMutableURLRequest *request [NSMutableURLRequestrequestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60.0f];//从请求中获取缓存输出NSCachedURLResponse *response [urlCache cachedResponseForRequest:request];//判断是否有缓存if (response ! nil){NSLog(”如果有缓存输出从缓存中获取数据”);[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];}self.connection nil;/* 创建NSURLConnection*/NSURLConnection *newConnection [[NSURLConnection alloc] initWithRequest:requestdelegate:selfstartImmediately:YES];self.connection newConnection;[newConnection release];}这个例子中我们请求url为www.baidu.com的网站。如果这个url被缓存了我们直接从缓存中获取数据否则从www.baidu.com站点上重新获取数据。我们设置了缓存大小为1M。使用下面代码我将请求的过程打印出来- (void) connection:(NSURLConnection *)connectiondidReceiveResponse:(NSURLResponse *)response{NSLog(”将接收输出”);}- (NSURLRequest *)connection:(NSURLConnection *)connectionwillSendRequest:(NSURLRequest *)requestredirectResponse:(NSURLResponse *)redirectResponse{NSLog(”即将发送请求”);return(request);}- (void)connection:(NSURLConnection *)connectiondidReceiveData:(NSData *)data{NSLog(”接受数据”);NSLog(”数据长度为 %lu”, (unsigned long)[data length]);}- (NSCachedURLResponse *)connection:(NSURLConnection *)connectionwillCacheResponse:(NSCachedURLResponse *)cachedResponse{NSLog(”将缓存输出”);return(cachedResponse);}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(”请求完成”);}- (void)connection:(NSURLConnection *)connectiondidFailWithError:(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] 数据长度为 44142011-07-30 18:50:31.682 Caching[3971:207] 接受数据2011-07-30 18:50:31.682 Caching[3971:207] 数据长度为 29962011-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] 数据长度为 74102011-07-30 18:52:18.896 Caching[3971:207] 请求完成 我们看到没有“将缓存输出”一项请求到的数据是第一次请求的累积也就是第二次是从内存中获取数据的。转自iOS分享网 http://iosshare.cn