ios-資料緩衝隨筆

來源:互聯網
上載者:User

標籤:

資料緩衝,就是把從網路上載入過來的資料,存到本地,目的是方便以後調用相同資料的時候,直接讀緩衝,不需要網路請求,既節省了client端的時間成本,有節省了serve端的負載成本。

ios當中,緩衝的對象NSUrlCache,iOS 5之前:只支援記憶體緩衝。從iOS 5開始:同時支援記憶體緩衝和硬碟緩衝。

3.NSURLCache的常見用法

(1)獲得全域緩衝對象(沒必要手動建立)NSURLCache *cache = [NSURLCache sharedURLCache]; 

(2)設定記憶體緩衝的最大容量(位元組為單位,預設為512KB)- (void)setMemoryCapacity:(NSUInteger)memoryCapacity;

(3)設定硬碟緩衝的最大容量(位元組為單位,預設為10M)- (void)setDiskCapacity:(NSUInteger)diskCapacity;

(4)硬碟緩衝的位置:沙箱/Library/Caches

//在這裡不需要設定記憶體中緩衝的位置,因為這個位置是電腦自動分配的。只需設定硬碟緩衝的位置即可。

(5)取得某個請求的緩衝- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request; 

(6)清除某個請求的緩衝- (void)removeCachedResponseForRequest:(NSURLRequest *)request;

(7)清除所有的緩衝- (void)removeAllCachedResponses;

4.緩衝GET請求

  要想對某個GET請求進行資料緩衝,非常簡單

  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

  // 設定緩衝策略

  request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;

  只要設定了緩衝策略,系統會自動利用NSURLCache進行資料緩衝 

5.iOS對NSURLRequest提供了7種緩衝策略:(實際上能用的只有4種)

NSURLRequestUseProtocolCachePolicy // 預設的緩衝策略(取決於協議)

NSURLRequestReloadIgnoringLocalCacheData // 忽略緩衝,重新請求

NSURLRequestReloadIgnoringLocalAndRemoteCacheData // 未實現

NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData // 忽略緩衝,重新請求

NSURLRequestReturnCacheDataElseLoad// 有緩衝就用緩衝,沒有緩衝就重新請求

NSURLRequestReturnCacheDataDontLoad// 有緩衝就用緩衝,沒有緩衝就不發請求,當做請求出錯處理(用於離線模式)

NSURLRequestReloadRevalidatingCacheData // 未實現

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3     // 1.建立請求 4     NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8080/YYServer/video"]; 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 6      7     // 2.設定緩衝策略(有緩衝就用緩衝,沒有緩衝就重新請求) 8     request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; 9     10     // 3.發送請求11     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {12         if (data) {13             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];14             15             NSLog(@"%@", dict);16         }17     }];18 }19 20 /**21  // 定期處理緩衝22  //    if (緩衝沒有達到7天) {23  //        request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;24  //    }25  // 獲得全域的緩衝對象26  NSURLCache *cache = [NSURLCache sharedURLCache];
定期清理緩衝的實現:
服務端返回時間(12312312312秒),用戶端轉化成天數判斷,如果大於七天(這裡比如說是七天緩衝時間),那麼先清理緩衝,再請求資料,如果小於七天,讀取緩衝。
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(@"---這個請求已經存在緩衝");
36
}
else { 37 NSLog(@"---這個請求沒有緩衝"); 38 }
總結:

   AFNetworking,應該內部實現了緩衝機制,有緩衝就先載入記憶體中得緩衝,沒緩衝再重新請求。(AFNetWorking,應該整合了NSUrlCache,網路類發送非同步請求)。

定期清理緩衝的實現:

服務端返回時間(12312312312秒),用戶端轉化成天數判斷,如果大於七天(這裡比如說是七天緩衝時間),那麼先清理緩衝,再請求資料,如果小於七天,讀取緩衝。

貌似也可以實現client端進行時間對比,定期清理緩衝,有想法的同學可以想一下。

 

ios-資料緩衝隨筆

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.