iOS 缓存机制 沙河机制

本文介绍了iOS应用中缓存数据的两种方法:一是利用沙盒机制存储数据,包括文件路径的拼接和数据的读写;二是通过ASIHTTPRequest和ASIDownloadCache实现本地HTTP请求的缓存,包括设置全局Cache、缓存策略以及清理缓存的方法。这两种方式有助于节省流量,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存机制:


1、沙河机制:

(1)使用步骤:

  a、拼接存储文件路径: 

string = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    

    NSString *strPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

    NSLog(@"%@",strPath);

    

    NSString *path = [NSString stringWithFormat:@"%@/%ld.aa",strPath,[string hash]];

 b、写入对应路径

 [NSKeyedArchiver archiveRootObject:responseObject toFile:path];

 c、从对应的路径读取数据
[NSKeyedUnarchiver unarchiveObjectWithFile:path];

(3)优缺点:

 存入数据的范围广。



2.使用ASIHTTPRequest和ASIDownloadCache实现本地缓存


  a、设置全局的Cache

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


@interface AppDelegate : UIResponder <UIApplicationDelegate>

{

    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];


  b、设置缓存策略

    在实现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];


    c、清理缓存数据


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


AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

[appDelegate.myCache clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];


d、优点:

节约流量,有更好的用户体验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值