- 浏览: 29256 次
文章分类
- 全部博客 (23)
- java (23)
- 一个不会重复的HelloWord 随机大小写.... (1)
- T-SQL查询进阶-10分钟理解游标 (1)
- java.lang.IncompatibleClassChangeError (1)
- Timer定时任务 (1)
- struts2文件下载示例 (1)
- 做了一个脚本,方便大家用sunpot做中文全文索引 (1)
- html 初始化加载flex (1)
- 一个儿童学习英语的有趣网址e-learningforkids (1)
- 如何在Apache FtpServer基础上增加或者修改FTP命令 (1)
- 空间信息到GML的转换 (1)
- 正则表达式复习 (1)
- 几个事情随便说一下 (1)
- 捕获IP数据包的Java类Jpcap (1)
- 下决心学习IBM的DB2相关 (1)
- iOS开发之缓存(一):内存缓存 (1)
- 从权限管理看互联网产品的盈利方式 (1)
- static_cast、dynamic_cast reinterpret_cast和const_ cast (1)
- ext 加载慢的原因 (1)
- 做个男人,做个成熟的男人,做个有城府的男人 (1)
- Android NDK开发入门实例 (1)
- 彩信制作之SMIL规范 (1)
- java的socket编程总结大全 (1)
- timer timertask (1)
最新评论
-
wwwang89:
楼主,写的太好了,,求demo一份:wwwang89@163. ...
iOS开发之缓存(一):内存缓存 -
qkjava:
标记一下子
做个男人,做个成熟的男人,做个有城府的男人 -
LiHu0512:
嗯,学习学习,当成熟的男人!
做个男人,做个成熟的男人,做个有城府的男人 -
mywjch:
恩,仔细看看自己有什么不足
做个男人,做个成熟的男人,做个有城府的男人 -
奥义之舞:
怎么出来这么多HTML标签
做个男人,做个成熟的男人,做个有城府的男人
前面一片文章介绍了如何上传和下载文件,这篇文章将介绍一下如何在iOS设备中进行缓存。
这篇文章将只介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。
内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。
1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。<br>
2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。<br>
3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。<br>
4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式;<br>
5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。<br>
6NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
NSURLCache还提供了很多方法,来方便我们实现应用程序的缓存机制。下面我通过一个例子来说明,这个例子减少我们对同一个url多次请求。看下面代码:
<textarea readonly name="code" class="plain">-(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];
}
</textarea>这个例子中,我们请求url为www.baidu.com的网站。如果这个url被缓存了,我们直接从缓存中获取数据,否则从www.baidu.com站点上重新获取数据。我们设置了缓存大小为1M。
使用下面代码,我将请求的过程打印出来:
<textarea readonly name="code" class="plain">- (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(@"请求失败");
} </textarea><br>
当我们第一次点击界面上的按钮,打印的结果如下:
<textarea readonly name="code" class="html">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] 请求完成
</textarea><br>
在看我们第二次点击界面上的按钮,打印结果如下:
<table><tbody><tr>
<td class="content"><code class="sql plain">2011-07-30 18:52:18.894 Caching[3971:207] 即将发送请求
</code></td>
</tr></tbody></table>
<div class="line alt2">
<table><tbody><tr>
<td class="content"><code class="sql plain">2011-07-30 18:52:18.895 Caching[3971:207] 将接收输出
</code></td>
</tr></tbody></table>
<div class="line alt1">
<table><tbody><tr>
<td class="content"><code class="sql plain">2011-07-30 18:52:18.895 Caching[3971:207] 接受数据
</code></td>
</tr></tbody></table>
<div class="line alt2">
<table><tbody><tr>
<td class="content"><code class="sql plain">2011-07-30 18:52:18.896 Caching[3971:207] 数据长度为 = 7410
</code></td>
</tr></tbody></table>
<div class="line alt1">
<table><tbody><tr>
<td class="content"><code class="sql plain">2011-07-30 18:52:18.896 Caching[3971:207] 请求完成</code></td>
</tr></tbody></table>
我们看到没有“将缓存输出”一项,请求到的数据是第一次请求的累积,也就是第二次是从内存中获取数据的。
总结:本文简单的介绍了一下iOS的内存缓存机制,下一篇文章将重点介绍一下本地缓存机制
发表评论
-
timer timertask
2012-02-08 16:07 1027<p style="text-al ... -
java的socket编程总结大全
2012-02-08 15:12 788<span style="color: ... -
彩信制作之SMIL规范
2012-02-03 09:44 1086参考地址:http://blog.163.com/ch ... -
Android NDK开发入门实例
2012-01-31 13:58 1433<h1 align="center&q ... -
做个男人,做个成熟的男人,做个有城府的男人
2012-01-31 13:19 1866<p align="cente ... -
ext 加载慢的原因
2011-12-28 11:54 1440内网系统使用EXT是不应该慢,慢只能说明是EXT没有用 ... -
static_cast、dynamic_cast reinterpret_cast和const_ cast
2011-12-20 17:04 1252<span style="col ... -
从权限管理看互联网产品的盈利方式
2011-12-20 10:54 712咋们做产品,基 ... -
下决心学习IBM的DB2相关
2011-12-19 10:04 821开始学习一本书《DB2 UDB V8.1 Certif ... -
捕获IP数据包的Java类Jpcap
2011-12-14 19:09 817... -
几个事情随便说一下
2011-12-14 11:49 8121最近上网奇慢无比,基本无法完成留言操作,所以如果有问 ... -
正则表达式复习
2011-12-13 11:14 866<p class="MsoNorma ... -
空间信息到GML的转换
2011-12-12 15:04 759<p class="MsoNorm ... -
如何在Apache FtpServer基础上增加或者修改FTP命令
2011-12-12 14:15 1513<p class="MsoN ... -
一个儿童学习英语的有趣网址e-learningforkids
2011-12-09 12:34 3345最经在一直在研究儿童如何学英语方面的东西,发现一些有意 ... -
html 初始化加载flex
2011-12-09 10:39 1384<span style="color: ... -
做了一个脚本,方便大家用sunpot做中文全文索引
2011-12-08 17:44 844sunspot ( https://github.co ... -
struts2文件下载示例
2011-12-06 10:35 908? package com.topdt.polices ... -
Timer定时任务
2011-12-06 09:29 801利用Timer类创建出一个对象,其中有schedule ... -
java.lang.IncompatibleClassChangeError
2011-12-05 18:41 3434?? 今天在修改代码之后用maven重新打包替换原来的 ...
相关推荐
在iOS应用开发中,缓存机制扮演着至关重要的角色,它可以显著提高用户体验,减少网络延迟,避免不必要的数据传输。本文主要关注iOS中的内存缓存机制,即如何利用SDK中的`NSURLCache`类来存储和检索数据。 首先,`...
1. 内存缓存:内存缓存主要处理短暂的缓存数据,如HTTP响应头中的"Cache-Control: max-age"指定的短时间内有效。内存缓存响应速度快,但受设备内存限制,当内存不足时,缓存会被清理。 2. 磁盘缓存:磁盘缓存通常...
在iOS开发中,异步加载图片缓存是一个关键的技术点,尤其在处理大量图片数据时,如滚动列表或网格视图。这个小例子旨在演示如何有效地实现这一功能,以优化用户体验,避免因为逐个下载图片导致的应用卡顿。以下是...
在iOS应用开发中,缓存是必不可少的一部分,它能够提高应用程序的性能,减少网络请求,为用户提供更快的体验。然而,随着应用的使用,缓存可能会积累过多,占用设备存储空间,甚至可能导致应用运行缓慢。因此,理解...
在iOS应用开发中,离线缓存是一种至关重要的技术,它允许用户在无网络连接时仍然可以访问之前加载过的数据,提升用户体验。本资源“ios-iOS离线缓存.zip”提供了一个名为“OfflineCache”的项目,旨在解决iOS应用中...
在iOS开发中,缓存是一种重要的技术,用于提高应用程序的性能和用户体验。"iOS 缓存功能类"是一个专门设计来处理iOS应用中字符串和图片缓存的小型、高效工具。下面将详细介绍这类缓存机制及其相关知识点。 一、缓存...
总之,iOS系统缓存开发涉及如何有效利用内存和硬盘缓存,以提高应用程序的响应速度和用户体验。通过合理配置`NSURLCache`和选择合适的缓存策略,开发者可以优化网络请求,减少不必要的网络流量,并在离线状态下提供...
在iOS开发中,数据缓存是一种常见的技术,用于提高应用性能和用户体验。当用户首次访问数据时,系统会将这些数据存储在本地,以便后续快速访问,而不是每次都从服务器加载。这里我们关注的是通过SQLite来实现自定义...
在iOS应用开发中,高效的图片加载和管理是用户体验的关键因素之一。SDWebImage是一个非常流行的第三方库,专门用于处理网络图片的下载、缓存以及显示。这个库为开发者提供了便捷的方式来处理图片,避免了因为频繁的...
在iOS开发中,AVPlayer是苹果提供的一种强大的多媒体播放框架,可以用来播放音频和视频。在处理在线视频时,缓存技术是至关重要的,它能让用户在观看视频时获得流畅的体验,即使在网络不稳定或者断开的情况下也能...
在iOS开发中,网络请求是应用与服务器交互的基础,它涉及到数据的获取、解析和展示。本项目"ios-带缓存和风火轮的网络请求,自定义缓存时间.zip"显然关注的是如何高效、智能地处理网络请求,特别是缓存策略的定制。...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量网络图片的场景下,如社交媒体、电商应用等。图片缓存能够显著提高用户体验,减少网络请求,节省流量,并减轻服务器压力。本篇文章将深入探讨iOS图片...
以下是一个基本的Swift函数,用于清理上述各种类型的缓存: ```swift import Foundation func clearCaches() { // 清理URLCache let cache = URLCache.shared cache.removeAllCachedResponses() // 清理...
在iOS开发中,缓存管理是一项重要的任务,特别是在处理大量网络资源的应用中,例如图片、视频等。SDWebImage是一个广泛使用的第三方库,它提供了图片的下载和缓存功能。当用户频繁访问网络内容时,缓存能显著提高...
在iOS开发中,UIWebView是苹果提供的一种用于展示网页内容的控件,它允许开发者在应用内部嵌入HTML、CSS和JavaScript代码。然而,当网络条件不佳或者无网络时,UIWebView无法正常加载网页,这可能导致用户体验下降。...
在iOS开发中,获取相册图片并将其缓存到本地是一项常见的需求,这不仅可以提高应用的性能,还能提供离线访问的能力。以下是如何实现这一功能的详细步骤。 首先,我们需要导入必要的框架。`Photos`框架用于访问用户...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量图片展示的场景下,如瀑布流、相册浏览等。本项目提供的“ios 图片缓存类”旨在提供一个简单易用的解决方案,利用GCD(Grand Central Dispatch)进行...
在iOS开发中,WebView是一种常见的用来展示网页内容的组件,它可以是Safari浏览器的一部分,也可以内嵌在自定义的应用程序中。本项目“ios-WebView离线缓存.zip”主要探讨的是如何利用YYCache和系统提供的...
在iOS应用开发中,内存管理是一项至关重要的任务,因为苹果的iOS系统是一个封闭的环境,对应用程序的资源使用有着严格的限制。"iOS App 内存专项实践:封闭系统下的大自由"这一主题深入探讨了如何在这样的环境中有效...