博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios数据缓存方法
阅读量:4930 次
发布时间:2019-06-11

本文共 3193 字,大约阅读时间需要 10 分钟。

转载自: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 = @"";  
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这种存储策略的缓存数据,如果更换其他的参数的话,即可清理对应存储策略的缓存数据。

转载于:https://www.cnblogs.com/AnnieBabygn/p/5319879.html

你可能感兴趣的文章
动态逆序对
查看>>
C# using用法
查看>>
Java ActiveMQ 讲解(一)理解JMS 和 ActiveMQ基本使用(转)
查看>>
virtual box 下安装centos 7
查看>>
Sqlserver:动态性能视图:sys.dm_os_wait_stats
查看>>
CSS3圆角详解
查看>>
Linux 内核升级
查看>>
每天进步一点点006
查看>>
【转】简谈基于FPGA的千兆以太网
查看>>
10周机电大作业设计
查看>>
Nginx事件管理之ngx_event_core_module模块
查看>>
mysql修改表、字段、库的字符集(转)
查看>>
多项式三种方法比较
查看>>
程序员过关斩将--你的业务是可变的吗(福利你领了吗)
查看>>
菜鸟入门【ASP.NET Core】11:应用Jwtbearer Authentication、生成jwt token
查看>>
ODP操作procedure
查看>>
关于ie6,7body overflow:hidden失效的问题....
查看>>
【BZOJ】【3524】【POI2014】Couriers
查看>>
Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
查看>>
Spark学习笔记——手写数字识别
查看>>