偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

iOS開發(fā)之內(nèi)存緩存機(jī)制

移動(dòng)開發(fā) iOS
本文先介紹一下將內(nèi)容緩存到內(nèi)存中,在iOS應(yīng)用程序開發(fā)中,為了減少與服務(wù)端的交互次數(shù),加快用戶的響應(yīng)速度,一般都會(huì)在iOS設(shè)備中加一個(gè)緩存的機(jī)制。

使用緩存的目的是為了使用的應(yīng)用程序能更快速的響應(yīng)用戶輸入,是程序高效的運(yùn)行。有時(shí)候我們需要將遠(yuǎn)程web服務(wù)器獲取的數(shù)據(jù)緩存起來(lái),減少對(duì)同一個(gè)url多次請(qǐng)求。

內(nèi)存緩存我們可以使用sdk中的NSURLCache類。NSURLRequest需要一個(gè)緩存參數(shù)來(lái)說明它請(qǐng)求的url何如緩存數(shù)據(jù)的,我們先看下它的CachePolicy類型。

1、NSURLRequestUseProtocolCachePolicy NSURLRequest默認(rèn)的cache policy,使用Protocol協(xié)議定義。

2、NSURLRequestReloadIgnoringCacheData 忽略緩存直接從原始地址下載。

3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data時(shí)才從原始地址下載。

4、NSURLRequestReturnCacheDataDontLoad 只使用cache數(shù)據(jù),如果不存在cache,請(qǐng)求失敗;用于沒有建立網(wǎng)絡(luò)連接離線模式;

5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和遠(yuǎn)程的緩存數(shù)據(jù),直接從原始地址下載,與NSURLRequestReloadIgnoringCacheData類似。

6、NSURLRequestReloadRevalidatingCacheData:驗(yàn)證本地?cái)?shù)據(jù)與遠(yuǎn)程數(shù)據(jù)是否相同,如果不同則下載遠(yuǎn)程數(shù)據(jù),否則使用本地?cái)?shù)據(jù)。

NSURLCache還提供了很多方法,來(lái)方便我們實(shí)現(xiàn)應(yīng)用程序的緩存機(jī)制。下面我通過一個(gè)例子來(lái)說明,這個(gè)例子減少我們對(duì)同一個(gè)url多次請(qǐng)求。看下面代碼:

  1. -(IBAction) buttonPress:(id) sender  
  2. {  
  3.     NSString *paramURLAsString= @"http://www.baidu.com/";  
  4.     if ([paramURLAsString length] == 0){  
  5.         NSLog(@"Nil or empty URL is given");  
  6.         return;  
  7.     }  
  8.     NSURLCache *urlCache = [NSURLCache sharedURLCache];  
  9.     /* 設(shè)置緩存的大小為1M*/ 
  10.     [urlCache setMemoryCapacity:1*1024*1024];  
  11.      //創(chuàng)建一個(gè)nsurl  
  12.     NSURL *url = [NSURL URLWithString:paramURLAsString];  
  13.         //創(chuàng)建一個(gè)請(qǐng)求  
  14.     NSMutableURLRequest *request =  
  15.     [NSMutableURLRequest 
  16.      requestWithURL:url  
  17.      cachePolicy:NSURLRequestUseProtocolCachePolicy 
  18.      timeoutInterval:60.0f];  
  19.      //從請(qǐng)求中獲取緩存輸出  
  20.     NSCachedURLResponse *response =  
  21.     [urlCache cachedResponseForRequest:request];  
  22.     //判斷是否有緩存  
  23.     if (response != nil){  
  24.         NSLog(@"如果有緩存輸出,從緩存中獲取數(shù)據(jù)");  
  25.         [request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];  
  26.     }  
  27.     self.connection = nil;  
  28.     /* 創(chuàng)建NSURLConnection*/ 
  29.     NSURLConnection *newConnection =  
  30.     [[NSURLConnection alloc] initWithRequest:request  
  31.                                     delegate:self 
  32.                             startImmediately:YES];  
  33.     self.connection = newConnection;  
  34.     [newConnection release];  

 

這個(gè)例子中,我們請(qǐng)求url為www.baidu.com的網(wǎng)站。如果這個(gè)url被緩存了,我們直接從緩存中獲取數(shù)據(jù),否則從www.baidu.com站點(diǎn)上重新獲取數(shù)據(jù)。我們?cè)O(shè)置了緩存大小為1M。

使用下面代碼,我將請(qǐng)求的過程打印出來(lái):

  1. - (void)  connection:(NSURLConnection *)connection     
  2.   didReceiveResponse:(NSURLResponse *)response{     
  3.     NSLog(@"將接收輸出");     
  4. }     
  5. - (NSURLRequest *)connection:(NSURLConnection *)connection     
  6.              willSendRequest:(NSURLRequest *)request     
  7.             redirectResponse:(NSURLResponse *)redirectResponse{     
  8.     NSLog(@"即將發(fā)送請(qǐng)求");     
  9.     return(request);     
  10. }     
  11. - (void)connection:(NSURLConnection *)connection     
  12.     didReceiveData:(NSData *)data{     
  13.     NSLog(@"接受數(shù)據(jù)");     
  14.     NSLog(@"數(shù)據(jù)長(zhǎng)度為 = %lu", (unsigned long)[data length]);     
  15. }     
  16. - (NSCachedURLResponse *)connection:(NSURLConnection *)connection     
  17.                   willCacheResponse:(NSCachedURLResponse *)cachedResponse{     
  18.     NSLog(@"將緩存輸出");     
  19.     return(cachedResponse);     
  20. }     
  21. - (void)connectionDidFinishLoading:(NSURLConnection *)connection{     
  22.     NSLog(@"請(qǐng)求完成");     
  23. }     
  24. - (void)connection:(NSURLConnection *)connection     
  25.   didFailWithError:(NSError *)error{     
  26.     NSLog(@"請(qǐng)求失敗");     
  27. }    

當(dāng)我們***次點(diǎn)擊界面上的按鈕,打印的結(jié)果如下:

 

  1. 2011-07-30 18:50:24.910 Caching[3971:207] 即將發(fā)送請(qǐng)求     
  2. 2011-07-30 18:50:28.557 Caching[3971:207] 將接收輸出     
  3. 2011-07-30 18:50:31.677 Caching[3971:207] 接受數(shù)據(jù)     
  4. 2011-07-30 18:50:31.681 Caching[3971:207] 數(shù)據(jù)長(zhǎng)度為 = 4414     
  5. 2011-07-30 18:50:31.682 Caching[3971:207] 接受數(shù)據(jù)     
  6. 2011-07-30 18:50:31.682 Caching[3971:207] 數(shù)據(jù)長(zhǎng)度為 = 2996     
  7. 2011-07-30 18:50:38.107 Caching[3971:207] 將緩存輸出     
  8. 2011-07-30 18:50:38.109 Caching[3971:207] 請(qǐng)求完成    

在看我們第二次點(diǎn)擊界面上的按鈕,打印結(jié)果如下:

  1. 2011-07-30 18:52:18.894 Caching[3971:207] 即將發(fā)送請(qǐng)求 
  2. 2011-07-30 18:52:18.895 Caching[3971:207] 將接收輸出 
  3. 2011-07-30 18:52:18.895 Caching[3971:207] 接受數(shù)據(jù) 
  4. 2011-07-30 18:52:18.896 Caching[3971:207] 數(shù)據(jù)長(zhǎng)度為 = 7410 
  5. 2011-07-30 18:52:18.896 Caching[3971:207] 請(qǐng)求完成 

我們看到?jīng)]有“將緩存輸出”一項(xiàng),請(qǐng)求到的數(shù)據(jù)是***次請(qǐng)求的累積,也就是第二次是從內(nèi)存中獲取數(shù)據(jù)的。

責(zé)任編輯:佚名 來(lái)源: zhuqilin0博客
相關(guān)推薦

2011-08-02 10:50:56

iOS開發(fā) 內(nèi)存緩存

2009-08-26 14:52:19

.NET Framew

2016-03-09 09:54:47

Python開發(fā)緩存機(jī)制

2015-09-16 15:21:23

Android性能優(yōu)化內(nèi)存

2016-12-22 17:21:11

Android性能優(yōu)化內(nèi)存泄漏

2011-07-21 14:42:45

iOS UIViewCont 內(nèi)存

2011-04-25 14:06:23

java

2015-12-28 11:41:57

JVM內(nèi)存區(qū)域內(nèi)存溢出

2011-08-16 18:46:35

IOS開發(fā)Three20緩存機(jī)制

2013-12-17 15:46:04

iOS開發(fā)iOS 內(nèi)存泄漏

2012-02-01 14:12:55

iOS本地緩存機(jī)制

2021-10-03 14:37:06

編程語(yǔ)言程序員代碼

2011-12-28 13:38:00

JavaJVM

2019-06-27 11:18:00

Spark內(nèi)存大數(shù)據(jù)

2009-06-17 15:43:03

Hibernate緩存

2023-02-24 16:46:25

Glide緩存機(jī)制

2014-03-04 15:28:32

iOS開發(fā)消息傳遞機(jī)制

2017-03-14 18:48:06

Android性能優(yōu)化內(nèi)存優(yōu)化

2009-11-09 17:55:13

WCF緩存

2010-10-13 16:44:10

MySQL查詢緩存機(jī)制
點(diǎn)贊
收藏

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