转载自:http://zhidao.baidu.com/link?url=jNTz6lkL1way8bJ-WPY197Pe9aEM_ql-MZbVJsM5tXr7Mv82W70QQ5a9UlvhMMS6xicm1HVprRAE3Cypr-zqdwDGDrS3BbbHEuW2-xgvlX_

方法一:一般将服务器第一次返回的数据保存在沙盒里面。这样在手机断网的情况下可以从本地读取数据了。

1.保存到沙盒的代码:

[plain] view 
plaincopy

+ (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判断本地是否有

[plain] view 
plaincopy

+ (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;  
}

如果沙盒里面有数据

[plain] view 
plaincopy

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;

方法二:使用ASIHTTPRequest和ASIDownloadCache实现本地缓存

1、设置全局的Cache

在AppDelegate.h中添加一个全局变量

[plain] view plaincopy

@interface AppDelegate : UIResponder  
{  
ASIDownloadCache *myCache;  
}  
@property (strong, nonatomic) UIWindow *window;  
@property (nonatomic,retain) ASIDownloadCache *myCache;

在AppDelegate.m中的- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代码

[plain] view plaincopy

//自定义缓存  
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方法中添加如下语句

[plain] view plaincopy

[myCache release];

到这里为止,就完成了全局变量的声明。

2、设置缓存策略

在实现ASIHTTPRequest请求的地方设置request的存储方式,代码如下

[plain] view plaincopy

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、清理缓存数据

我在这里采用的是手动清理数据的方式,在适当的地方添加如下代码,我将清理缓存放在了应用的设置模块:

[plain] view plaincopy

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];  
[appDelegate.myCache clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];

这里清理的是ASICachePermanentlyCacheStoragePolicy这种存储策略的缓存数据,如果更换其他的参数的话,即可清理对应存储策略的缓存数据。

ios数据缓存方法的更多相关文章

  1. 最全的iOS数据存储方法

    目的 项目准备运用的Core Data进行本地数据存储,本来打算只写一下Core Data的,不过既然说到了数据存储,干脆来个数据存储基础大总结!本文将对以下几个模块进行叙述. 沙盒 Plist Pr ...

  2. iOS数据缓存及YYCache的实现分析

    1. 什么是cache cache就是缓存的意思. 计算机上的cache就是高速缓存,计算机组成课程里的定义是,存在于主存和CPU之间,主要用于解决CPU处理数据的速度远远大于读取主存数据的速度. 手 ...

  3. jQuery数据缓存data(name, value)详解及实现

    一. jQuery数据缓存的作用 jQuery数据缓存的作用在中文API中是这样描述的:“用于在一个元素上存取数据而避免了循环引用的风险”.如何理解这句话呢,看看我下面的举例,不知道合不合适,如果你有 ...

  4. 数据缓存iOS

    有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费(2)程序响应速度不够快 解决上 ...

  5. 玩转iOS开发 - 数据缓存

    Why Cache 有时候.对同一个URL请求多次,返回的数据可能都是一样的,比方server上的某张图片.不管下载多少次,返回的数据都是一样的. 上面的情况会造成下面问题 (1)用户流量的浪费 (2 ...

  6. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  7. iOS - LocalCache 本地数据缓存

    1.自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视 ...

  8. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  9. iOS 处理缓存的三种方法

    缓存处理是个相当头疼的事情,要根据需要综合应用不同的策略.总的来说有以下几种情况: 1.URL缓存,例如社交应用的帖子浏览,要在viewDidAppear:里面进行URL缓存.简单来说就是用NSURL ...

随机推荐

  1. The Services(服务)

    datastore和运行时环境的关系就是和一个服务的关系:应用使用API访问一个独立的系统(separate system),这个系统管理应用的所有的独立于应用实例的扩展需求(scaling need ...

  2. Java 简繁转换 ZHConverter

    Sample import com.spreada.utils.chinese.ZHConverter; public class Test{ public static void main(Stri ...

  3. MySQL锁问题最佳实践

    最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会造成严重的影响,没有处理经验的用户往往无从下手.下面将从整个数据库设计,开发,运维阶段介绍如何 ...

  4. Hibernate之QBC查询与本地SQL查询

    1. QBC查询:     QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 ...

  5. HTML中RGB颜色查询对照表

    RGB颜色查询对照表     因为兼容性问题,色阶板功能只能在IE浏览器中运行 RGB颜色对照表   #FFFFFF   #FFFFF0   #FFFFE0   #FFFF00   #FFFAFA   ...

  6. UVaLive 7370 Classy (排序,比较)

    题意:给定 n 个人,和他们的数进行比较,从后面开始比,如果不够长,加middle接着比,直到没有,如果还相同比名字. 析:很水的题,就不用说了. 代码如下: #pragma comment(link ...

  7. UVaLive 7362 Farey (数学,欧拉函数)

    题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...

  8. HDU 4438 Hunters (数学,概率计算)

    题意:猎人A和B要进行一场比赛.现在有两个猎物老虎和狼,打死老虎可以得X分,打死狼可以得Y分.现在有两种情况: (1)如果A与B的预定目标不同,那么他们都将猎到预定的目标. (2)如果A与B的预定目标 ...

  9. 关于cocoapods添加静态库的奇葩配置

    不多说,直接上代码 当引入这个静态库时,一开始死活在编辑时找不到这个静态库. 直到看到这个贴子:http://stackoverflow.com/questions/19189463/cocoapod ...

  10. EasyUI 下拉列表联动

    //绑定部门.人员下拉菜单项 function BindDdl() { var $ddlbm = $("#ddlBm");//部门下拉列表 var $ddlry = $(" ...