- 浏览: 711420 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
javenwong:
你好,我现在需要给一个Composite做圆角处理,不知道怎么 ...
SWT圆角窗口绘制 -
whao189:
回家了详细看看
Storyboard 解析 -
zhaoyubetter:
确实够麻烦
IOS 开发环境,证书和授权文件是什么? -
datawarehouse:
一直对这两个认为是一样的,现在学习了。
Oracle DB中的Schema -
yulanfeiyang:
顶,mark
下载音频,在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类似。
6NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
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:52: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] 请求完成 |
我们看到没有“将缓存输出”一项,请求到的数据是第一次请求的累积,也就是第二次是从内存中获取数据的。
发表评论
-
iphone编程之UILabel 用法详解
2012-12-18 14:38 1406这段代码动态的创建了一个UILabel,并且把相关常用的属 ... -
IOS用正则验证手机号
2012-12-14 12:01 17210- (BOOL)validateMobile:(NSStr ... -
UITableView技巧之去除UITableViewCell边框
2012-12-14 10:42 3605有时候想在UITableViewCell中加内容,但又不想要c ... -
MAC MySQL Workbench执行批量更新和删除的时候错误解决
2012-10-25 11:21 4003处理MySQL更新表时ErrorCode:1175.You a ... -
Objective-C编码风格指南
2012-10-17 17:00 1228参考资料: • Apple: Coding Guideline ... -
autorelease对象具体什么时候释放?
2012-09-19 15:21 1042在项目中,会有一个默认的Autorelease pool,程序 ... -
Objective-C内存管理教程和原理剖析
2012-09-10 14:44 898此文涉及的内存管理是针对于继承于NSObject的Clas ... -
IOS开发内存释放小结
2012-09-03 17:34 5366内存释放是iphone开发过程中比较重的地方,所以在开辟内存后 ... -
为什么Android没有iOS那么顺滑
2012-08-29 14:38 904虽然很多Android手机的配 ... -
UITextView关闭键盘
2012-08-29 14:13 142121.如果你程序是有导航条的,可以在导航条上面加多一个Done的 ... -
Mac系统下查看鼠标所在点的RGB值--数码测色计
2012-08-29 14:05 1797苹果电脑的Mac OS X系统自带鼠标所在点颜色RGB值查看工 ... -
UIView你知道多少
2012-08-21 09:49 844曾经有人这么说过,在i ... -
Objective-C内存管理总结〜CC专版
2012-08-17 18:24 822iPhone系统中的Objective-C的内存管理机制是比较 ... -
iOS内存管理
2012-08-17 18:19 28401. 内总管理原则(引用计数) IOS的对象都继承于 ... -
IOS 获取当前系统时间的年、月、日、小时、分、秒
2012-08-14 17:33 6625NSCalendar *calendar = [[NSCa ... -
IOS判断是否为数字
2012-08-13 17:59 4911判断是否为整形: - (BOOL)isPureInt:(N ... -
self.用法
2012-08-09 14:55 849MyClass.h @interface MyClass ... -
#import与@class的区别
2012-08-08 17:13 9411.import会包含这个类的所有信息,包括实体变量和方法,而 ... -
iphone图标去掉光晕效果
2012-08-07 16:53 1161图片背景是透明的 如果想去掉光晕效果,就在info.plist ... -
去掉 App Store 内图标上部高亮效果的办法
2012-08-07 16:52 892苹果默认会在 App Store 里的应用图标上半部自 ...
相关推荐
在iOS应用开发中,缓存机制扮演着至关重要的角色,它可以显著提高用户体验,减少网络延迟,避免不必要的数据传输。本文主要关注iOS中的内存缓存机制,即如何利用SDK中的`NSURLCache`类来存储和检索数据。 首先,`...
1. 内存缓存:内存缓存主要处理短暂的缓存数据,如HTTP响应头中的"Cache-Control: max-age"指定的短时间内有效。内存缓存响应速度快,但受设备内存限制,当内存不足时,缓存会被清理。 2. 磁盘缓存:磁盘缓存通常...
在iOS开发中,异步加载图片缓存是一个关键的技术点,尤其在处理大量图片数据时,如滚动列表或网格视图。这个小例子旨在演示如何有效地实现这一功能,以优化用户体验,避免因为逐个下载图片导致的应用卡顿。以下是...
在iOS应用开发中,缓存是必不可少的一部分,它能够提高应用程序的性能,减少网络请求,为用户提供更快的体验。然而,随着应用的使用,缓存可能会积累过多,占用设备存储空间,甚至可能导致应用运行缓慢。因此,理解...
在iOS应用开发中,离线缓存是一种至关重要的技术,它允许用户在无网络连接时仍然可以访问之前加载过的数据,提升用户体验。本资源“ios-iOS离线缓存.zip”提供了一个名为“OfflineCache”的项目,旨在解决iOS应用中...
总之,iOS系统缓存开发涉及如何有效利用内存和硬盘缓存,以提高应用程序的响应速度和用户体验。通过合理配置`NSURLCache`和选择合适的缓存策略,开发者可以优化网络请求,减少不必要的网络流量,并在离线状态下提供...
在iOS开发中,缓存是一种重要的技术,用于提高应用程序的性能和用户体验。"iOS 缓存功能类"是一个专门设计来处理iOS应用中字符串和图片缓存的小型、高效工具。下面将详细介绍这类缓存机制及其相关知识点。 一、缓存...
在iOS开发中,数据缓存是一种常见的技术,用于提高应用性能和用户体验。当用户首次访问数据时,系统会将这些数据存储在本地,以便后续快速访问,而不是每次都从服务器加载。这里我们关注的是通过SQLite来实现自定义...
在iOS应用开发中,高效的图片加载和管理是用户体验的关键因素之一。SDWebImage是一个非常流行的第三方库,专门用于处理网络图片的下载、缓存以及显示。这个库为开发者提供了便捷的方式来处理图片,避免了因为频繁的...
在iOS开发中,网络请求是应用与服务器交互的基础,它涉及到数据的获取、解析和展示。本项目"ios-带缓存和风火轮的网络请求,自定义缓存时间.zip"显然关注的是如何高效、智能地处理网络请求,特别是缓存策略的定制。...
以下是一个基本的Swift函数,用于清理上述各种类型的缓存: ```swift import Foundation func clearCaches() { // 清理URLCache let cache = URLCache.shared cache.removeAllCachedResponses() // 清理...
在iOS开发中,缓存管理是一项重要的任务,特别是在处理大量网络资源的应用中,例如图片、视频等。SDWebImage是一个广泛使用的第三方库,它提供了图片的下载和缓存功能。当用户频繁访问网络内容时,缓存能显著提高...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量网络图片的场景下,如社交媒体、电商应用等。图片缓存能够显著提高用户体验,减少网络请求,节省流量,并减轻服务器压力。本篇文章将深入探讨iOS图片...
在iOS开发中,UIWebView是苹果提供的一种用于展示网页内容的控件,它允许开发者在应用内部嵌入HTML、CSS和JavaScript代码。然而,当网络条件不佳或者无网络时,UIWebView无法正常加载网页,这可能导致用户体验下降。...
一、iOS缓存类型 1. 文件系统缓存:iOS应用通常会将数据存储为文件,包括图片、JSON数据、数据库文件等。这些文件会被保存在应用的沙盒目录下,如Documents、Library/Caches或tmp目录。 2. NSURLCache:网络请求的...
在iOS开发中,WebView是一种常见的用来展示网页内容的组件,它可以是Safari浏览器的一部分,也可以内嵌在自定义的应用程序中。本项目“ios-WebView离线缓存.zip”主要探讨的是如何利用YYCache和系统提供的...
在iOS开发中,获取相册图片并将其缓存到本地是一项常见的需求,这不仅可以提高应用的性能,还能提供离线访问的能力。以下是如何实现这一功能的详细步骤。 首先,我们需要导入必要的框架。`Photos`框架用于访问用户...
在iOS开发中,图片缓存是一个非常重要的环节,特别是在处理大量图片展示的场景下,如瀑布流、相册浏览等。本项目提供的“ios 图片缓存类”旨在提供一个简单易用的解决方案,利用GCD(Grand Central Dispatch)进行...
在iOS应用开发中,加载器(Loader)是用户体验的重要组成部分,特别是在进行数据下载或加载缓存时,一个良好的进度条可以提升用户对等待过程的感知,降低其不耐烦感。这个“ios应用源码之加载器(当下载或加载缓存...
在iOS开发中,数据持久化是一项重要的技术,用于在应用关闭或设备重启后保存和恢复数据。本项目“ios-缓存.zip”提供了一个简单封装的归档与反归档工具类,它针对网络请求场景进行了优化,可以处理有网络和无网络两...