IOS 最重量級三方庫 Three20 Network 緩衝機制小析:

來源:互聯網
上載者:User

前置知識:

http協議內建的Last-Modified和ETag,詳細的網上搜尋下就行了。簡單來說就是,伺服器在返回資源時包含一個ID(時間或是某種token),用戶端緩衝該ID,下一次再請求同一資源時,包含這個ID,伺服器根據此ID來判斷資源是否改變,從而返回不同的結果(200或是304)。

 

Three20實現的預設緩衝方案是:

TTURLRequestCachePolicyDefault

= (TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk

| TTURLRequestCachePolicyNetwork),

TTURLRequestCachePolicyNetwork 代表使用 Last-Modified 策略,

TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk 代表使用記憶體和檔案快取資源和資源ID,

 

改變緩衝方案:

TTURLRequest request;

//blah,blah

request.cachePolicy = cachePolicy | TTURLRequestCachePolicyEtag;

 

這裡增加了Etag的功能,如果伺服器支援的話,毫無疑問這是最佳的方案。其他類推,比如不需要緩衝。

 

如何使用緩衝:

這裡拉一段TTImageView的代碼,一看就知道:

- (void)reload {

if (nil == _request && nil != _urlPath) {

UIImage* image = [[TTURLCache sharedCache] imageForURL:_urlPath];

 

if (nil != image) {

self.image = image;

 

} else {

TTURLRequest* request = [TTURLRequest requestWithURL:_urlPath delegate:self];

request.response = [[[TTURLImageResponse alloc] init] autorelease];

 

if (![request send]) {

// Put the default image in place while waiting for the request to load

if (_defaultImage && nil == self.image) {

  self.image = _defaultImage;

}

}

}

}

}

使用TTURLCache的單例,可以擷取任意url資源的本機快取。這裡的邏輯是這樣的:

首先判斷記憶體中是否存在這種圖片:

UIImage* image = [[TTURLCache sharedCache] imageForURL:_urlPath]

如果不存在,發起一個request,使用預設的policy,擷取該圖片。假設該圖片上次開啟程式時已經下載過,已經緩衝在disk(這是預設的),並且圖片在伺服器上沒有變更,且伺服器支援if-modified, request預設就會返回disk上的圖片。

 

詳細的可以看TTURLCache

 

總結:

如果手動send 一個request,則預設的policy就可以很好的實現了緩衝機制。一些內建的控制項,比如TTTableView, 如果包含圖片,也實現的很理想。

相關文章

聯繫我們

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