緩存

參考:

  1. iOS開發(fā)網(wǎng)絡篇
  2. NSCache緩存類的詳解
    3.H5緩存機制淺析-移動端Web加載性能優(yōu)化【干貨】
    4.OKHTTP之緩存配置詳解

緩存 一般用于get

NSURLCache 和 NSCache 的區(qū)別

  1. NSURLCache提供的是URL Request緩存,可以在Memory和Disk上;NSCache提供了HTTP Request外的東西的緩存方式,在Memory上。
  2. NSCache和NSDictionary類似,不同的是系統(tǒng)回收內(nèi)存的時候它會自動刪掉它的內(nèi)容.AFNetworking的圖片緩存采用的就是NSCache。
  3. NSURLCache一般用于UIWebView,只對異步請求有效,程序中只有一個NSURLCache,為了使響應更靈敏而且更像本地用戶界面。
1. NSURLCache本地緩存

1.首先設置urlcache

NSURLCache *cache = [NSURLCache sharedURLCache];//全局就只有這一個cache
[cache setMemoryCapacity:100 * 1024 * 1024];//設置內(nèi)存
[cache setDiskCapacity:100 * 1024 * 1024];//設置磁盤
[NSURLCache setSharedURLCache:cache];//同步

2.創(chuàng)建請求。

NSURL *url = [NSURL URLWithString:@"http://o0o0o0o.iteye.com/images/sina.jpg"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 // 2.設置緩存策略(有緩存就用緩存,沒有緩存就重新請求)
 request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;

3.發(fā)送請求

//第一次請求會緩存到內(nèi)存和本地,以后直接返回結(jié)構,不會再去請求
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緩存
同樣是設置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中應該拿到數(shù)據(jù)展示出來,然后請求最新的數(shù)據(jù),如果成功,顯示最新數(shù)據(jù),失敗則就還是展示的緩存數(shù)據(jù),并提示加載失敗。在viewWillDisappear中應該將此時展示的數(shù)據(jù)寫入本地。當加載首頁數(shù)據(jù)失敗,還要考慮,要不要上拉加載更多,如果等保證數(shù)據(jù)不會重復,則可以上拉加載,如果數(shù)據(jù)可能會重復,則我們要禁止上拉加載更多,可以將page 設置為首頁減1,然后結(jié)束刷新的時候判斷,page是不是首頁減1,是的話隱藏footer。

如何保證上拉加載數(shù)據(jù)不重復:可以使用最后一條消息的id來請求新的數(shù)據(jù)。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 概覽 緩存組件應該說是每個客戶端程序必備的核心組件,試想對于每個界面的訪問都必須重新請求勢必降低用戶體驗。但是如何...
    默默_David閱讀 2,043評論 1 9
  • 如果你是一名使用Mattt Thompson網(wǎng)絡框架AFNetworking的iOS開發(fā)者(如果你不是,那還等什么...
    OrekiSei閱讀 1,057評論 0 6
  • #iOS網(wǎng)絡緩存掃盲篇 #--使用兩行代碼就能完成80%的緩存需求 下篇預告:[使用80%的代碼來完成剩下的20%...
    coding_chen閱讀 2,172評論 0 11
  • 福馬倒計時11天 哈哈,其實這一天都已經(jīng)快過完咯!開心今晚出門跑步一口氣跑完了5km。目標完成,雖然速度還是那個樣...
    西諾Cici閱讀 290評論 0 0
  • 二十年前,此刻的我們還在備戰(zhàn)高考,再有—個月就將走向決定命運的時刻。 備戰(zhàn)的時刻,似乎并不緊張,還是我把那份記憶封...
    JC賈閱讀 421評論 1 0

友情鏈接更多精彩內(nèi)容