IOS開發(fā)中第三方庫Three20 Network緩存機制
IOS開發(fā)中第三方庫Three20 Network緩存機制是本文要介紹的內(nèi)容,主要是來學習Three20 Network緩存機制,具體內(nèi)容來看本文詳細內(nèi)容講解。
前置知識:
http協(xié)議自帶的Last-Modified和ETag,詳細的網(wǎng)上搜索下就行了。簡單來說就是,服務(wù)器在返回資源時包含一個ID(時間或是某種token),客戶端緩存該ID,下一次再請求同一資源時,包含這個ID,服務(wù)器根據(jù)此ID來判斷資源是否改變,從而返回不同的結(jié)果(200或是304)。
Three20實現(xiàn)的默認緩存方案是:
- TTURLRequestCachePolicyDefault
- = (TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk
- | TTURLRequestCachePolicyNetwork),
- TTURLRequestCachePolicyNetwork 代表使用 Last-Modified 策略,
- TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk 代表使用內(nèi)存和文件緩存資源和資源ID,
改變緩存方案:
- TTURLRequest request;
- //blah,blah
- request.cachePolicy = cachePolicy | TTURLRequestCachePolicyEtag;
這里增加了Etag的功能,如果服務(wù)器支持的話,毫無疑問這是***的方案。其他類推,比如不需要緩存。
如何使用緩存:
這里拉一段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資源的本地緩存。這里的邏輯是這樣的:
首先判斷內(nèi)存中是否存在這種圖片:
- UIImage* image = [[TTURLCache sharedCache] imageForURL:_urlPath]
如果不存在,發(fā)起一個request,使用默認的policy,獲取該圖片。假設(shè)該圖片上次打開程序時已經(jīng)下載過,已經(jīng)緩存在disk(這是默認的),并且圖片在服務(wù)器上沒有變更,且服務(wù)器支持if-modified, request默認就會返回disk上的圖片。
詳細的可以看TTURLCache,如果手動send 一個request,則默認的policy就可以很好的實現(xiàn)了緩存機制。一些內(nèi)置的控件,比如TTTableView, 如果包含圖片,也實現(xiàn)的很理想。
小結(jié):IOS開發(fā)中第三方庫Three20 Network緩存機制的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!