參考:
緩存 一般用于get
NSURLCache 和 NSCache 的區(qū)別
- NSURLCache提供的是URL Request緩存,可以在Memory和Disk上;NSCache提供了HTTP Request外的東西的緩存方式韧骗,在Memory上眼刃。
- NSCache和NSDictionary類似,不同的是系統(tǒng)回收內(nèi)存的時候它會自動刪掉它的內(nèi)容.AFNetworking的圖片緩存采用的就是NSCache啡直。
- NSURLCache一般用于UIWebView,只對異步請求有效,程序中只有一個NSURLCache只磷,為了使響應(yīng)更靈敏而且更像本地用戶界面蝙斜。
1. NSURLCache本地緩存
1.首先設(shè)置urlcache
NSURLCache *cache = [NSURLCache sharedURLCache];//全局就只有這一個cache
[cache setMemoryCapacity:100 * 1024 * 1024];//設(shè)置內(nèi)存
[cache setDiskCapacity:100 * 1024 * 1024];//設(shè)置磁盤
[NSURLCache setSharedURLCache:cache];//同步
2.創(chuàng)建請求名惩。
NSURL *url = [NSURL URLWithString:@"http://o0o0o0o.iteye.com/images/sina.jpg"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.設(shè)置緩存策略(有緩存就用緩存,沒有緩存就重新請求)
request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
3.發(fā)送請求
//第一次請求會緩存到內(nèi)存和本地孕荠,以后直接返回結(jié)構(gòu)娩鹉,不會再去請求
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
NSLog(@"fddfd");//只會打印一次
}
}];
[task resume];
4.webView緩存
同樣是設(shè)置request為可緩存策略即可
5.緩存其他方法
/**
21 // 定期處理緩存
22 // if (緩存沒有達到7天) {
23 // request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
24 // }
25 // 獲得全局的緩存對象
26 NSURLCache *cache = [NSURLCache sharedURLCache];
27 // if (緩存達到7天) {
28 // [cache removeCachedResponseForRequest:request];
29 // }
30
31 // lastCacheDate = 2014-06-30 11:04:30
32
33 NSCachedURLResponse *response = [cache cachedResponseForRequest:request];
34 if (response) {
35 NSLog(@"---這個請求已經(jīng)存在緩存");
36 } else {
37 NSLog(@"---這個請求沒有緩存");
38 }
39 */
緩存文件:要放在library/cache中,這個文件不會同步到icloud中.
緩存的邏輯:在viewWillAppear中應(yīng)該拿到數(shù)據(jù)展示出來稚伍,然后請求最新的數(shù)據(jù)弯予,如果成功,顯示最新數(shù)據(jù)个曙,失敗則就還是展示的緩存數(shù)據(jù)锈嫩,并提示加載失敗。在viewWillDisappear中應(yīng)該將此時展示的數(shù)據(jù)寫入本地。當(dāng)加載首頁數(shù)據(jù)失敗呼寸,還要考慮那槽,要不要上拉加載更多,如果等保證數(shù)據(jù)不會重復(fù)等舔,則可以上拉加載骚灸,如果數(shù)據(jù)可能會重復(fù),則我們要禁止上拉加載更多慌植,可以將page 設(shè)置為首頁減1甚牲,然后結(jié)束刷新的時候判斷,page是不是首頁減1蝶柿,是的話隱藏footer丈钙。
如何保證上拉加載數(shù)據(jù)不重復(fù):可以使用最后一條消息的id來請求新的數(shù)據(jù)。