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