iOS開發本地快取(資料離線快取、讀取、釋放)
阿新 • • 發佈:2019-01-24
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:(
- //自定義快取
- 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];