成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發ASIHTTPRequest使用download cache

移動開發 iOS
本文為大家介紹了iOS開發ASIHTTPRequest使用download cache的內容,其中包括cache策略,存儲策略,其他cache相關的特性,編寫自己的cache等等內容。

本文為大家介紹了iOS開發ASIHTTPRequest使用download cache的內容,其中包括cache策略,存儲策略,其他cache相關的特性,編寫自己的cache等等內容。

從1.8版本開始,ASIDownloadCache和ASICacheDelegate的API改變了,你可能需要修改你的代碼。

尤其是,cache策略的可用選項發生了改變,你現在可以對單一request使用結合的cache策略

ASIHTTPRequest可以自動緩存下載的數據,在很多情況下這很有用。

  • 當你離線時,你無法再次下載數據,而你又需要訪問這些數據
  • 從上次下載這些數據后,你只想在數據更新后才下載新的數據
  • 你處理的數據永遠不會發生改變,所以你只想下載一次數據

在之前版本的ASIHTTPRequest里,遇到上述情況,你只能自己處理這些策略。在一些情況下,使用download cache可以讓你不用再寫本地緩存機制。

ASIDownloadCache 是個簡單的URL cache,可以用來緩存GET請求的相應數據。一個request要被緩存,它首先必須請求成功(沒有發送錯誤),服務器必須返回200HTTP狀態值。或者,從1.8.1版本開始,301,302,303,307重定向狀態碼都可以。

要打開響應值的cache機制很簡單:

  1. [ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]; 

這樣做以后,所有的request都會自動使用cache。如果你愿意,你可以讓不同的request使用共享的cache:

  1. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  2. [request setDownloadCache:[ASIDownloadCache sharedCache]]; 

你不會被局限于使用單一的cache,你可以想創建多少cache就創建多少cache,只要你喜歡 ^ ^。當你自己創建一個cache,你必須設定cache的路徑——這路徑必須是一個你擁有寫權限的目錄。

  1. ASIDownloadCache *cache = [[[ASIDownloadCache alloc] init] autorelease]; 
  2. [cache setStoragePath:@"/Users/ben/Documents/Cached-Downloads"]; 
  3.  
  4. //別忘了 - 你必須自己retaining你自己的cache! 
  5. [self setMyCache:cache]; 
  6.  
  7. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  8. [request setDownloadCache:[self myCache]]; 

cache策略

cache策略是你控制cache中信息的主要方法,控制何時使用cache數據而非重新下載數據。

每個request的cache策略可是由request的cachePolicy 屬性來控制的。cache策略使用掩碼來定義,所以你可以二進制“與”操作他們。

  1. // 每次都向服務器詢問是否有新的內容可用, 
  2. // 如果請求失敗, 使用cache的數據,即使這個數據已經過期了 
  3. [request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy]; 

你可以使用下列cache策略選項來控制request的緩存策略:

ASIUseDefaultCachePolicy

默認的cache 策略。請勿將這一項與其他項結合使用。當你設置一個request使用cache,它會使用cache的defaultCachePolicy. ASIDownloadCache的默認cache策略是‘ASIAskServerIfModifiedWhenStaleCachePolicy’. 

ASIDoNotReadFromCacheCachePolicy

使用這一項,request將不會從cache中讀取數據

ASIDoNotWriteToCacheCachePolicy

使用這一項,request將不會把數據存入cache

ASIAskServerIfModifiedWhen

StaleCachePolicy

這是ASIDownloadCaches的默認cache策略。使用這個策略時,request會先查看cache中是否有可用的緩存數據。如果沒有,request會像普通request那樣工作。

如果有緩存數據并且緩存數據沒有過期,那么request會使用緩存的數據,而且不會向服務器通信。如果緩存數據過期了,request會先進行GET請求來想服務器詢問數據是否有新的版本。如果服務器說緩存的數據就是當前版本,那么緩存數據將被使用,不會下載新數據。在這種情況下,cache的有效期將被設定為服務器端提供的新的有效期。如果服務器提供更新的內容,那么新內容會被下載,并且新的數據以及它的有效期將被寫入cache。

ASIAskServerIfModifiedCachePolicy

這一項與ASIAskServerIfModifiedWhenStaleCachePolicy相同,除了一點:request將會每次都詢問服務器端數據是否有更新。

ASIOnlyLoadIfNotCachedCachePolicy

使用這一項,cache數據將一直被使用,無視過期時間

ASIDontLoadCachePolicy

使用這一項時,只有當響應數據有緩存時,request才會成功。如果一個request沒有緩存的響應數據,那么這個request將會停止,并且不會有錯誤設置在request上。

ASIFallbackToCacheIf

LoadFailsCachePolicy

當使用這一項時,當request失敗時,request會回頭請求cache數據。如果請求失敗后,request使用的cache數據,那么這個request會成功(沒有錯誤)。你通常會將這一項與其他項結合使用,因為它適用于指定當發生錯誤時request的行為。

當你設定了一個cache對象的defaultCachePolicy 屬性,所有使用這個cache對象的request都會使用這個cache策略,除非你為request設置了另外的策略。

存儲策略

存儲策略允許你定義一個cache可以存儲特定的相應數據多久。ASIHTTPRequest目前支持兩種存儲策略:

ASICacheForSessionDurationCacheStoragePolicy是默認值。相應數據只會在會話期間被存儲,在第一次使用cache時,或者在調用 [ASIHTTPRequest clearSession]時,數據會被清除。

使用ASICachePermanentlyCacheStoragePolicy,緩存的相應數據會被永久存儲。要使用這個存儲策略,向request設置:

  1. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  2. [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

要手動清除cache,調用函數clearCachedResponsesForStoragePolicy:,傳入要清除的cache數據的存儲策略:

  1. [[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

其他cache相關的特性

  1. // 當你關閉 shouldRespectCacheControlHeaders,cache對象會存儲響應數據,而無視 
  2. // 服務器的顯式“請勿緩存”聲明 (例如:cache-control 或者pragma: no-cache 頭) 
  3. [[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO]; 
  4.  
  5. // 可以設定request的secondsToCache來覆蓋服務器設定的內容有效期, 這時,響應數據 
  6. // 會一直被緩存,直到經過secondsToCache秒 
  7. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  8. [request setSecondsToCache:60*60*24*30]; // 緩存30 天 
  9.  
  10. //當request開始執行后,如果響應數據是從緩存中取得的,didUseCachedResponse 會返回YES 
  11. [request didUseCachedResponse]; 
  12.  
  13. // 向cache對象索取一個路徑來存儲相應數據. 這是使用download cache的最有效率的方法, 
  14. // 因為此時,當request完成后,數據不需要被復制到cache中. 
  15. [request setDownloadDestinationPath: 
  16.    [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:request]]; 

編寫自己的cache

如果你已經持有一個download cache并且想將他插入ASIHTTPRequest中,或者你喜歡自己寫自己的download cache,那么讓你的cache實現ASICacheDelegate協議。

責任編輯:閆佳明 來源: dreamingwish
相關推薦

2013-07-22 14:33:15

iOS開發ASIHTTPRequ

2013-07-22 13:48:55

iOS開發ASIHTTPRequ使用Cookie

2013-07-21 18:22:59

iOS開發ASIHTTPRequ

2013-07-22 14:38:00

iOS開發ASIHTTPRequ

2013-07-21 18:18:00

iOS開發ASIHttpRequ

2013-07-21 18:27:15

iOS開發ASIHTTPRequ

2013-07-22 13:54:32

iOS開發ASIHTTPRequ

2013-07-21 18:32:13

iOS開發ASIHTTPRequ

2013-07-22 14:25:29

iOS開發ASIHTTPRequ

2013-07-22 14:43:57

iOS開發ASIHTTPRequ

2013-07-21 18:09:21

iOS開發ASIHttpRequ創建和執行reques

2013-07-22 14:02:17

iOS開發ASIHTTPRequ

2013-07-22 14:29:35

iOS開發ASIHTTPRequ

2013-07-21 18:04:22

ASIHttpRequiOS開發

2013-03-25 14:13:23

iOSASIHTTPRequ

2011-08-22 10:06:38

IOS開發ASIHTTPRequHTTP 請求

2013-07-22 14:10:26

iOS開發ASIHTTPRequ

2011-08-10 17:37:00

iPhoneASIHTTPRequ

2011-08-12 13:35:23

iPhone文件流ASIHTTPRequ

2009-06-29 09:00:42

Hibernate的Q
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av高清在线 | 黄色片免费看视频 | 日韩精品不卡 | 亚洲网站免费看 | 综合网伊人 | av日韩高清 | 久久这里只有精品首页 | 亚洲国产第一页 | 午夜电影网站 | 蜜桃特黄a∨片免费观看 | 成人天堂 | 91视频在线| 国产成人a亚洲精品 | 亚洲免费视频播放 | 日韩欧美在线视频 | 最新日韩欧美 | 成人超碰 | 欧美一区二区在线免费观看 | 黄色毛片黄色毛片 | 国产视频欧美 | 成人欧美一区二区三区在线播放 | 99精品国产一区二区青青牛奶 | 天堂成人国产精品一区 | 成人国产精品入口免费视频 | 黄色片在线免费看 | 亚洲精品粉嫩美女一区 | 91精品国模一区二区三区 | 一级看片免费视频 | 91tv在线观看| 夜夜草天天草 | 久亚州在线播放 | 黄色片免费在线观看 | 亚洲狠狠爱 | 日韩欧美操 | 久久精品视频在线观看 | 欧美精品一区二区在线观看 | 国产二区三区 | 国产福利资源 | 欧美精品一区三区 | 成年人免费在线视频 | 精品在线一区二区三区 |