自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS開(kāi)發(fā)ASIHTTPRequest使用download cache

移動(dòng)開(kāi)發(fā) iOS
本文為大家介紹了iOS開(kāi)發(fā)ASIHTTPRequest使用download cache的內(nèi)容,其中包括cache策略,存儲(chǔ)策略,其他cache相關(guān)的特性,編寫自己的cache等等內(nèi)容。

本文為大家介紹了iOS開(kāi)發(fā)ASIHTTPRequest使用download cache的內(nèi)容,其中包括cache策略,存儲(chǔ)策略,其他cache相關(guān)的特性,編寫自己的cache等等內(nèi)容。

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

尤其是,cache策略的可用選項(xiàng)發(fā)生了改變,你現(xiàn)在可以對(duì)單一request使用結(jié)合的cache策略

ASIHTTPRequest可以自動(dòng)緩存下載的數(shù)據(jù),在很多情況下這很有用。

  • 當(dāng)你離線時(shí),你無(wú)法再次下載數(shù)據(jù),而你又需要訪問(wèn)這些數(shù)據(jù)
  • 從上次下載這些數(shù)據(jù)后,你只想在數(shù)據(jù)更新后才下載新的數(shù)據(jù)
  • 你處理的數(shù)據(jù)永遠(yuǎn)不會(huì)發(fā)生改變,所以你只想下載一次數(shù)據(jù)

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

ASIDownloadCache 是個(gè)簡(jiǎn)單的URL cache,可以用來(lái)緩存GET請(qǐng)求的相應(yīng)數(shù)據(jù)。一個(gè)request要被緩存,它首先必須請(qǐng)求成功(沒(méi)有發(fā)送錯(cuò)誤),服務(wù)器必須返回200HTTP狀態(tài)值?;蛘?,從1.8.1版本開(kāi)始,301,302,303,307重定向狀態(tài)碼都可以。

要打開(kāi)響應(yīng)值的cache機(jī)制很簡(jiǎn)單:

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

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

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

你不會(huì)被局限于使用單一的cache,你可以想創(chuàng)建多少cache就創(chuàng)建多少cache,只要你喜歡 ^ ^。當(dāng)你自己創(chuàng)建一個(gè)cache,你必須設(shè)定cache的路徑——這路徑必須是一個(gè)你擁有寫權(quán)限的目錄。

  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中信息的主要方法,控制何時(shí)使用cache數(shù)據(jù)而非重新下載數(shù)據(jù)。

每個(gè)request的cache策略可是由request的cachePolicy 屬性來(lái)控制的。cache策略使用掩碼來(lái)定義,所以你可以二進(jìn)制“與”操作他們。

  1. // 每次都向服務(wù)器詢問(wèn)是否有新的內(nèi)容可用, 
  2. // 如果請(qǐng)求失敗, 使用cache的數(shù)據(jù),即使這個(gè)數(shù)據(jù)已經(jīng)過(guò)期了 
  3. [request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy]; 

你可以使用下列cache策略選項(xiàng)來(lái)控制request的緩存策略:

ASIUseDefaultCachePolicy

默認(rèn)的cache 策略。請(qǐng)勿將這一項(xiàng)與其他項(xiàng)結(jié)合使用。當(dāng)你設(shè)置一個(gè)request使用cache,它會(huì)使用cache的defaultCachePolicy. ASIDownloadCache的默認(rèn)cache策略是‘ASIAskServerIfModifiedWhenStaleCachePolicy’. 

ASIDoNotReadFromCacheCachePolicy

使用這一項(xiàng),request將不會(huì)從cache中讀取數(shù)據(jù)

ASIDoNotWriteToCacheCachePolicy

使用這一項(xiàng),request將不會(huì)把數(shù)據(jù)存入cache

ASIAskServerIfModifiedWhen

StaleCachePolicy

這是ASIDownloadCaches的默認(rèn)cache策略。使用這個(gè)策略時(shí),request會(huì)先查看cache中是否有可用的緩存數(shù)據(jù)。如果沒(méi)有,request會(huì)像普通request那樣工作。

如果有緩存數(shù)據(jù)并且緩存數(shù)據(jù)沒(méi)有過(guò)期,那么request會(huì)使用緩存的數(shù)據(jù),而且不會(huì)向服務(wù)器通信。如果緩存數(shù)據(jù)過(guò)期了,request會(huì)先進(jìn)行GET請(qǐng)求來(lái)想服務(wù)器詢問(wèn)數(shù)據(jù)是否有新的版本。如果服務(wù)器說(shuō)緩存的數(shù)據(jù)就是當(dāng)前版本,那么緩存數(shù)據(jù)將被使用,不會(huì)下載新數(shù)據(jù)。在這種情況下,cache的有效期將被設(shè)定為服務(wù)器端提供的新的有效期。如果服務(wù)器提供更新的內(nèi)容,那么新內(nèi)容會(huì)被下載,并且新的數(shù)據(jù)以及它的有效期將被寫入cache。

ASIAskServerIfModifiedCachePolicy

這一項(xiàng)與ASIAskServerIfModifiedWhenStaleCachePolicy相同,除了一點(diǎn):request將會(huì)每次都詢問(wèn)服務(wù)器端數(shù)據(jù)是否有更新。

ASIOnlyLoadIfNotCachedCachePolicy

使用這一項(xiàng),cache數(shù)據(jù)將一直被使用,無(wú)視過(guò)期時(shí)間

ASIDontLoadCachePolicy

使用這一項(xiàng)時(shí),只有當(dāng)響應(yīng)數(shù)據(jù)有緩存時(shí),request才會(huì)成功。如果一個(gè)request沒(méi)有緩存的響應(yīng)數(shù)據(jù),那么這個(gè)request將會(huì)停止,并且不會(huì)有錯(cuò)誤設(shè)置在request上。

ASIFallbackToCacheIf

LoadFailsCachePolicy

當(dāng)使用這一項(xiàng)時(shí),當(dāng)request失敗時(shí),request會(huì)回頭請(qǐng)求cache數(shù)據(jù)。如果請(qǐng)求失敗后,request使用的cache數(shù)據(jù),那么這個(gè)request會(huì)成功(沒(méi)有錯(cuò)誤)。你通常會(huì)將這一項(xiàng)與其他項(xiàng)結(jié)合使用,因?yàn)樗m用于指定當(dāng)發(fā)生錯(cuò)誤時(shí)request的行為。

當(dāng)你設(shè)定了一個(gè)cache對(duì)象的defaultCachePolicy 屬性,所有使用這個(gè)cache對(duì)象的request都會(huì)使用這個(gè)cache策略,除非你為request設(shè)置了另外的策略。

存儲(chǔ)策略

存儲(chǔ)策略允許你定義一個(gè)cache可以存儲(chǔ)特定的相應(yīng)數(shù)據(jù)多久。ASIHTTPRequest目前支持兩種存儲(chǔ)策略:

ASICacheForSessionDurationCacheStoragePolicy是默認(rèn)值。相應(yīng)數(shù)據(jù)只會(huì)在會(huì)話期間被存儲(chǔ),在第一次使用cache時(shí),或者在調(diào)用 [ASIHTTPRequest clearSession]時(shí),數(shù)據(jù)會(huì)被清除。

使用ASICachePermanentlyCacheStoragePolicy,緩存的相應(yīng)數(shù)據(jù)會(huì)被永久存儲(chǔ)。要使用這個(gè)存儲(chǔ)策略,向request設(shè)置:

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

要手動(dòng)清除cache,調(diào)用函數(shù)clearCachedResponsesForStoragePolicy:,傳入要清除的cache數(shù)據(jù)的存儲(chǔ)策略:

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

其他cache相關(guān)的特性

  1. // 當(dāng)你關(guān)閉 shouldRespectCacheControlHeaders,cache對(duì)象會(huì)存儲(chǔ)響應(yīng)數(shù)據(jù),而無(wú)視 
  2. // 服務(wù)器的顯式“請(qǐng)勿緩存”聲明 (例如:cache-control 或者pragma: no-cache 頭) 
  3. [[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO]; 
  4.  
  5. // 可以設(shè)定request的secondsToCache來(lái)覆蓋服務(wù)器設(shè)定的內(nèi)容有效期, 這時(shí),響應(yīng)數(shù)據(jù) 
  6. // 會(huì)一直被緩存,直到經(jīng)過(guò)secondsToCache秒 
  7. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  8. [request setSecondsToCache:60*60*24*30]; // 緩存30 天 
  9.  
  10. //當(dāng)request開(kāi)始執(zhí)行后,如果響應(yīng)數(shù)據(jù)是從緩存中取得的,didUseCachedResponse 會(huì)返回YES 
  11. [request didUseCachedResponse]; 
  12.  
  13. // 向cache對(duì)象索取一個(gè)路徑來(lái)存儲(chǔ)相應(yīng)數(shù)據(jù). 這是使用download cache的最有效率的方法, 
  14. // 因?yàn)榇藭r(shí),當(dāng)request完成后,數(shù)據(jù)不需要被復(fù)制到cache中. 
  15. [request setDownloadDestinationPath: 
  16.    [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:request]]; 

編寫自己的cache

如果你已經(jīng)持有一個(gè)download cache并且想將他插入ASIHTTPRequest中,或者你喜歡自己寫自己的download cache,那么讓你的cache實(shí)現(xiàn)ASICacheDelegate協(xié)議。

責(zé)任編輯:閆佳明 來(lái)源: dreamingwish
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)