在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
分享到:
相关推荐
OfflineCache项目可能是基于这些机制之一或者结合使用,以实现更高效、灵活的缓存管理。 1. **NSCache**: NSCache是内存中的缓存,用于临时存储对象,但当系统内存紧张时,它会自动清空。在离线缓存场景下,由于...
在iOS开发中,WebView是用于展示网页内容的重要组件,它允许我们在原生应用中嵌入HTML、CSS和JavaScript代码,实现丰富的交互体验。本篇主要探讨WebView页面缓存的实现和优化,这对于提升用户体验和减少网络请求至关...
在iOS开发中,缓存是一种重要的技术,用于提高应用程序的性能和用户体验。"iOS 缓存功能类"是一个专门设计来处理iOS应用中字符串和图片缓存的小型、高效工具。下面将详细介绍这类缓存机制及其相关知识点。 一、缓存...
在iOS开发中,缓存机制扮演着至关重要的角色,它能有效地提高应用性能,减少网络数据的消耗,提升用户体验。本文将深入探讨iOS缓存的原理、类型以及如何结合本地化和网络请求来优化应用程序。 首先,理解缓存的基本...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量网络图片的场景下,如社交媒体、电商应用等。图片缓存能够显著提高用户体验,减少网络请求,节省流量,并减轻服务器压力。本篇文章将深入探讨iOS图片...
在移动应用开发中,本地缓存机制扮演着至关重要的角色,它能显著提升用户体验,减少对网络的依赖,尤其在离线或者网络不稳定的情况下。本文将深入探讨如何为iOS平台设计一个高效的本地缓存系统。 首先,理解本地...
Swift-iOS缓存通知机制是iOS应用程序中一种重要的性能优化技术,它允许...通过观察者模式、Protobuffer集成、自定义类型的支持以及内存缓存的实现,我们可以构建一个高效、灵活的缓存通知框架,提升iOS应用的整体性能。
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量网络图片的场景下,能够显著提高用户体验。本文将深入探讨“ios图片缓存代码”这一主题,介绍一种高效的图片缓存类库,并讨论其核心功能和实现原理。 ...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量图片展示的场景下,如瀑布流、相册浏览等。本项目提供的“ios 图片缓存类”旨在提供一个简单易用的解决方案,利用GCD(Grand Central Dispatch)进行...
在iOS开发中,Webview是用于在应用内部展示网页内容的重要组件。`IOSwebview缓存`这个主题主要关注如何在iOS的Webview中实现页面的缓存功能,以提高用户体验,减少网络请求,降低数据消耗。缓存机制在移动应用中尤其...
在iOS开发中,管理应用程序的缓存是至关重要的任务,特别是对于那些处理大量数据或频繁更新内容的应用。本文将深入探讨“ios 清除缓存”这一主题,旨在帮助初学者理解如何有效地清理iOS应用中的缓存,提高用户体验并...
在iOS应用开发中,缓存机制是提高用户体验的关键。EGOCache能够有效地减少网络请求,加快数据加载,尤其是在用户反复访问相同数据的情况下。通过合理利用EGOCache,开发者可以显著降低服务器压力,提升应用性能,...
在iOS开发中,缓存管理是一项重要的任务,它涉及到应用性能和用户体验。缓存能够加快数据的读取速度,但不恰当的缓存管理可能导致内存占用过高,甚至引发应用崩溃。"iOS计算缓存大小工具类.zip" 文件提供了一个封装...
- 合理利用缓存:合理使用缓存机制,减少重复加载和计算,提高响应速度。 - 避免内存泄漏:确保代码逻辑正确,及时释放不再使用的对象,避免内存泄漏导致应用崩溃。 - 利用硬件加速:尽可能使用硬件加速功能,减轻...
内存管理是iOS开发中非常重要的一部分,尤其是在多核编程环境下。良好的内存管理不仅可以避免程序崩溃,还可以提高应用的性能。 ##### 内存引用计数 在Objective-C中,内存管理主要是通过引用计数(Retain Count)...
这个“ios开发-iOS开发实用demo之多图片多线程下载实例”提供了如何在iOS应用中实现这一功能的具体示例。以下是对这个示例中涉及的知识点的详细解释: 1. **多线程编程**: - iOS中的多线程主要通过`GCD (Grand ...
在iOS应用开发中,数据缓存是一项至关重要的技术,它能够提高应用性能,减少网络请求,优化用户体验。今天我们要深入探讨的是一款名为"kache"的开源iOS缓存控件,它提供了哈希、队列和时间池等高效的数据管理策略。...
UIKit是iOS开发中的核心框架之一,提供了丰富的UI组件和交互模型,帮助开发者快速构建用户界面。 #### 3.2 主要UI组件 - **视图控制器**(ViewController):用于管理和显示视图层次结构。 - **标签栏控制器**...
### iOS开发基础视频教程知识点概览 #### 一、iOS开发环境搭建 1. **Xcode安装与配置** - **Xcode下载**: 苹果官方开发者网站是获取最新版本Xcode的最佳途径。 - **Xcode安装**: 安装过程中需要注意磁盘空间的...