需要注意的是,要做緩存的Http請求必須用get方法來獲取數據。
1、設置全局的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];
在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這種存儲策略的緩存數據,如果更換其他的參數的話,即可清理對應存儲策略的緩存數據。
