iOS ASI--緩衝

來源:互聯網
上載者:User

標籤:

ASI的緩衝是ASI的一大特色,和蘋果原生的NSURLCache一樣,也提供了一個單例對象[ASIDownloadCache sharedCache]

1.ASI使用緩衝的條件

1>必須是GET請求

2>請求成功,狀態代碼是200

2.單個請求怎麼使用ASI緩衝

    // 設定URL

    NSURL *url = [NSURL URLWithString:@"http://localhots/123.png"];

    // 初始化請求

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

  // 監聽請求   

    __weak typeof(request) temp = request;  // 避免Block循環參考   

    [request setCompletionBlock:^{

        NSLog(@"----%@",temp.responseString);

    }];

    // 佈建要求的緩衝策略

    // 第1種方式,拿到ASIDownloadCache單例對象,設定預設緩衝策略;然後將這個單例設定為request的downloadCache(成員變數)

    ASIDownloadCache *cache = [ASIDownloadCache sharedCache];

    [cache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy];

    [request setDownloadCache:cache];

    

    // 第2種方式,不用ASIDownloadCache的單例對象,自己建立一個ASIDownloadCache對象,然後設定cache對象的緩衝路徑和預設緩衝策略,然後將這個cache對象設定為request的downloadCache(成員變數)

    ASIDownloadCache *myCache = [[ASIDownloadCache alloc]init];

    myCache.storagePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"myCache"];

    myCache.defaultCachePolicy = ASIOnlyLoadIfNotCachedCachePolicy;

    [request setDownloadCache:myCache];

    // 佈建要求的緩衝時間長度,有2種,分別是會話緩衝和硬碟緩衝

    [request setCacheStoragePolicy:ASICacheForSessionDurationCacheStoragePolicy];

補充說明:

Question1:為什麼 ASIDownloadCache的單例對象,不需要設定緩衝路徑,而自訂的ASIDownloadCache對象就需要設定緩衝路徑?

    因為[ASIDownloadCache sharedCache]方法裡,已經設定了緩衝路徑,可以跳進這個方法裡看看.

Question2:CachePolicy,CacheStoragePolicy分別代表什麼含義?

    CachePolicy表示什麼時候載入緩衝,什麼時候載入網路資料

    CacheStoragePolicy表示緩衝的時間長度

3.多個請求怎麼使用ASI緩衝

// 佈建要求1和請求2

    NSURL *url1 = [NSURL URLWithString:@"xxxxxx"];

    ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1];

    NSURL *url2 = [NSURL URLWithString:@"xxxxxxxxxxxxx"];

    ASIHTTPRequest *request2 = [ASIHTTPRequest requestWithURL:url2];

// 預設的緩衝管理對象

    ASIDownloadCache *cache = [ASIDownloadCache sharedCache];

    [cache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy];

// 佈建要求1的緩衝

  [request1 setDownloadCache:cache];

    request1.cachePolicy = ASIOnlyLoadIfNotCachedCachePolicy; // 根據就近原則,request1最終的cachePolicy=ASIOnlyLoadIfNotCachedCachePolicy

    request1.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;

// 佈建要求2的緩衝

  [request2 setDownloadCache:cache];

                                                                // request2沒設定cachePolicy,所以request2的cachePolicy = 預設的緩衝管理cache的DefaultCachePolicy

    request2.cacheStoragePolicy =ASICachePermanentlyCacheStoragePolicy;

補充說明:

1>ASIDownloadCache作用就是設定request的緩衝路徑,另外1個作用是提供了預設的DefaultCachePolicy

2>在這個緩衝路徑下會有2個檔案夾,1個是硬碟緩衝,另1個是臨時緩衝,request.cacheStoragePolicy決定了緩衝在具體哪個檔案夾下.所以request.downloadCache 和 request.cacheStoragePolicy必須設定,只有這2個屬性,都設定才能最終確定緩衝 儲存的路徑

3>request.cachePolicy,可根據實際需求決定是否設定.

如果request要遵從全域的緩衝策略,就不用設定,它會取ASIDownloadCache的DefaultCachePolicy

如果request有它自己個人化的地方,就要設定,它會根據就近原則,取自己的cachePolicy作為最終的緩衝策略

 

 

4.每個request都要設定downloadCache還是比較麻煩,所以ASI提供了便捷方法

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];

 

5.緩衝的其他特性

[request setSecondsToCache:60 * 60 * 24 * 7]; // 有效期間7天

BOOL isUseCache = [request didUseCachedResponse]; // 判斷資料是否來自緩衝

iOS ASI--緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.