簡體   English   中英

我怎么知道要使用哪個NSURLRequestCachePolicy

[英]How do I know which NSURLRequestCachePolicy to use

我希望我的數據總是從服務器中獲取,除非沒有網絡。 然后我要返回緩存的數據。 因此,無論是否有網絡,我的用戶總會得到一些數據(而不是告訴他們:不是網絡連接之類的)。 那么我應該使用哪個NSURLRequestCachePolicy呢?

“我希望我的數據總是從服務器中獲取,除非沒有網絡。然后,我希望返回緩存的數據。”

緩存策略常量在此處描述

沒有任何緩存策略執行您描述的操作。 如果服務器不可用,則可以通過將響應提供到緩存之外來實現自己的緩存邏輯(但是,實際上不建議這樣做)。

您的問題並未描述您是否希望將緩存的響應保存到磁盤。 NSURLCache默認情況下僅緩存內存,您可以創建一個NSURLCache實例,該實例可以輕松使用磁盤:

  cache = [[NSURLCache alloc] initWithMemoryCapacity:[(1024*1024*512) diskCapacity:(1024*1024*1024 * 100) diskPath:@"Cache.db"]:

可以將緩存設置為全局共享URL緩存,也可以將其與NSURLSessionConfiguration一起使用。

當您決定您的應用程序不應嘗試與服務器聯系時,可以通過請求緩存請求的響應來直接訪問緩存:

cachedResponse = [cache cachedResponseForRequest:request];

緩存的響應是NSCachedURLResponse ,其中包含與該請求的響應的緩存表示關聯的NSDataNSURLResponse 然后,您可以將那些對象分配給已實現的用於處理服務器響應的任何方法。

也就是說,使用NSURLRequestUseProtocolCachePolicy的默認緩存策略幾乎總是最佳選擇,而不是實施自己的緩存或更改請求的緩存策略。 當服務器響應HTTP請求時,響應中包含有關響應將持續多長時間以及在什么條件下有效的信息。 例如,響應可能包含這樣的標頭:

Cache-control: max-age:3600

這是服務器告訴客戶端提供的響應在3600秒內有效。 NSURLRequestUseProtocolCachePolicy理解這些值以及控制其在客戶端上使用的規則。 如果您在這3600秒內從客戶端發出相同的請求,則Foundation將為您的應用程序提供緩存的響應,而不是與服務器聯系。 “擁有”客戶端所請求數據的服務器是唯一可以正確推斷響應有效性的一方。

因此,在我們的示例中,假設用戶在這3600秒內處於“離線”狀態。 如果他們發出相同的請求,則應用程序將使用緩存的響應。 如果3600秒已過去,則上下文過期無效 服務器已告知客戶端,如果已過去3600秒,則不應使用此響應。 如果客戶端處於“脫機”狀態,則客戶端將無法聯系服務器使用緩存-這正是您想要的。 如果響應是應該“永不”更改的內容,則客戶端可以緩存並永久保存,則服務器將表明這一點(在這種情況下,可能通過在響應中發送年的最大壽命值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM