IOS开发中缓存策略
方法一:一般将服务器第一次返回的数据保存在沙盒里面。这样在手机断网的情况下可以从本地读取数据了。
1.保存到沙盒的代码:
- + (void)saveCache:(int)type andID:(int)_id andString:(NSString *)str;
- {
- NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];
- NSString * key = [NSString stringWithFormat:@"detail-%d-%d",type, _id];
- [setting setObject:str forKey:key];
- [setting synchronize];
- }
2.读取本地沙盒的代码
读取之前首先根据type和Id判断本地是否有
- + (NSString *)getCache:(int)type andID:(int)_id
- {
- NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];
- NSString *key = [NSString stringWithFormat:@"detail-%d-%d",type, _id];
- NSString *value = [settings objectForKey:key];
- return value;
- }
如果沙盒里面有数据
- NSString *value = [Tool getCache:5 andID:self.QiuTime];
- if (value) {
- NSDictionary *backdict = [value JSONValue];
- if ([backdict objectForKey:@"items"]) {
- NSArray *array=[NSArray arrayWithArray:[backdict objectForKey:@"items"]];
- for (NSDictionary *qiushi in array) {
- QiuShi *qs=[[[QiuShi alloc]initWithDictionary:qiushi] autorelease];
- [self.list addObject:qs];
- }
- }
- [self.tableView reloadData];
- }
- [self.tableView tableViewDidFinishedLoadingWithMessage:@"数据全部加载完了.."];
- self.tableView.reachedTheEnd = YES;
1、设置全局的Cache
在AppDelegate.h中添加一个全局变量
- @interface AppDelegate : UIResponder
- {
- ASIDownloadCache *myCache;
- }
- @property (strong, nonatomic) UIWindow *window;
- @property (nonatomic,retain) ASIDownloadCache *myCache;
在AppDelegate.m中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代码
- //自定义缓存
- ASIDownloadCache *cache = [[ASIDownloadCache alloc] init];
- self.myCache = cache;
- [cache release];
- //设置缓存路径
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentDirectory = [paths objectAtIndex:0];
- [self.myCache setStoragePath:[documentDirectory stringByAppendingPathComponent:@"resource"]];
- [self.myCache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];
在AppDelegate.m中的dealloc方法中添加如下语句
- [myCache release];
到这里为止,就完成了全局变量的声明。
2、设置缓存策略
在实现ASIHTTPRequest请求的地方设置request的存储方式,代码如下
- NSString *str = @"http://....../getPictureNews.aspx";
- NSURL *url = [NSURL URLWithString:str];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
- //获取全局变量
- AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
- //设置缓存方式
- [request setDownloadCache:appDelegate.myCache];
- //设置缓存数据存储策略,这里采取的是如果无更新或无法联网就读取缓存数据
- [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
- request.delegate = self;
- [request startAsynchronous];
3、清理缓存数据
我在这里采用的是手动清理数据的方式,在适当的地方添加如下代码,我将清理缓存放在了应用的设置模块:
- AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
- [appDelegate.myCache clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
这里清理的是ASICachePermanentlyCacheStoragePolicy这种存储策略的缓存数据,如果更换其他的参数的话,即可清理对应存储策略的缓存数据。
IOS开发中缓存策略的更多相关文章
- GIT在iOS开发中的使用
前言 在iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn.当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- 深入理解 iOS 开发中的锁
来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...
- iOS 开发中常见的设计模式
最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下) 首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (i ...
- iOS开发中关于UIImage的知识点总结
UIImage是iOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有 CGImage,以及iOS5.0以后新增加的CIImage.今天我们主要聊一聊UIImage的三个属性: image ...
- iOS开发中遇到的一些问题及解决方案【转载】
iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Creat ...
- 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度
ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...
- iOS开发中常见的一些异常
iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistency ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
随机推荐
- 3d Max 2018安装失败怎样卸载3dsmax?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- eclipse maven程序包org.junit不存在
今天使用maven打包项目的时候出现下面的错误,提示org.junit不存在. 错误信息内容如下: [ERROR] /Users/aven/Documents/workspace/share/src/ ...
- mustache语法 转自小花大方
mustache语法 mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.[ ...
- Java入门之IDE集成开发环境安装及配置
常用的开发工具 一.Eclipse Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse ...
- Linux下svn环境搭建
不久前买了一个阿里云服务器,想着在上面搭建一个svn服务方便自己的代码管理.顺便记录下自己的搭建过程 首先,安装服务 通过yum -stall subversion 安装snv,可能install之前 ...
- JavaSE之Java基础(1)
1.为什么重写equals还要重写hashcode 首先equals与hashcode间的关系是这样的: 1.如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相 ...
- spring 类注入失败,解决之道
1.今天偶尔发现的问题,如果你在一个类上面用了注解@Async,spring的异步注解之后,发现如果别的类用@Autowired导入这个类时会失败! 解决办法:用了@Async无非是想方便的用异步操作 ...
- js中各种距离clientWidth
1: offsetLeft.offsetTop.offsetHeight.offsetWidth 1.1 偏移参照——定位父级offsetParent offsetParent的定义是:与当前元素 ...
- [转c#]记录程序耗时的方法
多时候需要输出程序耗时,然后记录下来, 总是在程序执行开始记录当前时间点,在结尾记录结束时间点,然后两个时间相减, 那么有没有其他稍微像样点的方法呢? 告诉你,有滴 ; ) 这个方法主体就是 ...
- jQuery 浮动导航菜单(购物网站商品类型)
单页面网页内容较多,页面长度较大,需要方便快速的在页面的不同位置进行定位,所以浮动菜单逐渐流行了起来,如下图 男装.女装.美妆等. 这种菜单功能分为两部分: 1.点击菜单项,网页滚动到对应位置,可简单 ...