成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談iOS開發之內存緩存

移動開發 iOS
iOS開發之內存緩存,那么使用緩存的目的是為了使用的應用程序能更快速的響應用戶輸入,是程序高效的運行。先來詳細內容。

淺談iOS開發內存緩存是本文要的內容,主要僵尸如何將內存緩存到內存中,使用緩存的目的是為了使用的應用程序能更快速的響應用戶輸入,是程序高效的運行。有時候我們需要將遠程web服務器獲取的數據緩存起來,減少對同一個url多次請求。

內存緩存我們可以使用sdk中的NSURLCache類。NSURLRequest需要一個緩存參數來說明它請求的url何如緩存數據的,我們先看下它的CachePolicy類型。

1、NSURLRequestUseProtocolCachePolicy NSURLRequest默認的cache policy,使用Protocol協議定義。

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

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

4、NSURLRequestReturnCacheDataDontLoad 只使用cache數據,如果不存在cache,請求失敗;用于沒有建立網絡連接離線模式;

5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和遠程的緩存數據,直接從原始地址下載,與NSURLRequestReloadIgnoringCacheData類似。

6、NSURLRequestReloadRevalidatingCacheData:驗證本地數據與遠程數據是否相同,如果不同則下載遠程數據,否則使用本地數據。

NSURLCache還提供了很多方法,來方便我們實現應用程序的緩存機制。下面我通過一個例子來說明,這個例子減少我們對同一個url多次請求。看下面代碼:

  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.     /* 設置緩存的大小為1M*/   
  10.     [urlCache setMemoryCapacity:1*1024*1024];    
  11.      //創建一個nsurl    
  12.     NSURL *url = [NSURL URLWithString:paramURLAsString];    
  13.         //創建一個請求    
  14.     NSMutableURLRequest *request =    
  15.     [NSMutableURLRequest   
  16.      requestWithURL:url    
  17.      cachePolicy:NSURLRequestUseProtocolCachePolicy   
  18.      timeoutInterval:60.0f];    
  19.      //從請求中獲取緩存輸出    
  20.     NSCachedURLResponse *response =    
  21.     [urlCache cachedResponseForRequest:request];    
  22.     //判斷是否有緩存    
  23.     if (response != nil){    
  24.         NSLog(@"如果有緩存輸出,從緩存中獲取數據");    
  25.         [request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];    
  26.     }    
  27.     self.connection = nil;    
  28.     /* 創建NSURLConnection*/   
  29.     NSURLConnection *newConnection =    
  30.     [[NSURLConnection alloc] initWithRequest:request    
  31.                                    delegate:self   
  32.                             startImmediately:YES];    
  33.     self.connection = newConnection;    
  34.     [newConnection release];    
  35. }  

這個例子中,我們請求url為www.baidu.com的網站。如果這個url被緩存了,我們直接從緩存中獲取數據,否則從www.baidu.com站點上重新獲取數據。我們設置了緩存大小為1M。

使用下面代碼,我將請求的過程打印出來:

  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(@"即將發送請求");    
  9.     return(request);    
  10. }    
  11. - (void)connection:(NSURLConnection *)connection    
  12.     didReceiveData:(NSData *)data{    
  13.     NSLog(@"接受數據");    
  14.     NSLog(@"數據長度為 = %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(@"請求完成");    
  23. }    
  24. - (void)connection:(NSURLConnection *)connection    
  25.   didFailWithError:(NSError *)error{    
  26.     NSLog(@"請求失敗");    
  27. }  

當我們***次點擊界面上的按鈕,打印的結果如下:

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

在看我們第二次點擊界面上的按鈕,打印結果如下:

  1. 2011-07-30 18:52:18.894 Caching[3971:207] 即將發送請求    
  2. 2011-07-30 18:52:18.895 Caching[3971:207] 將接收輸出    
  3. 2011-07-30 18:52:18.895 Caching[3971:207] 接受數據    
  4. 2011-07-30 18:52:18.896 Caching[3971:207] 數據長度為 = 7410    
  5. 2011-07-30 18:52:18.896 Caching[3971:207] 請求完成  

我們看到沒有“將緩存輸出”一項,請求到的數據是***次請求的累積,也就是第二次是從內存中獲取數據的。

小結:淺談iOS開發內存緩存的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 博客園
相關推薦

2012-02-01 13:57:40

內存緩存機制

2011-07-28 10:01:19

IOS 內存優化

2011-07-13 18:44:32

SEO

2015-09-16 15:21:23

Android性能優化內存

2016-12-22 17:21:11

Android性能優化內存泄漏

2009-08-26 14:52:19

.NET Framew

2011-07-21 14:42:45

iOS UIViewCont 內存

2011-04-25 14:06:23

java

2015-12-28 11:41:57

JVM內存區域內存溢出

2011-06-28 15:37:34

Qt 內存

2013-12-17 15:46:04

iOS開發iOS 內存泄漏

2011-12-28 13:38:00

JavaJVM

2019-06-27 11:18:00

Spark內存大數據

2021-10-03 14:37:06

編程語言程序員代碼

2009-08-03 18:47:12

ASP.NET數據緩存

2017-04-26 14:15:35

瀏覽器緩存機制

2021-10-12 08:00:00

存儲邊緣緩存邊緣服務器

2020-03-23 09:17:32

內存操作系統Windows

2017-07-25 12:40:42

iOSCrash僵尸對象

2017-07-21 14:00:00

iOSCrashMach異常
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久久国产精品免费消防器 | 91文字幕巨乱亚洲香蕉 | 国产激情偷乱视频一区二区三区 | 久久久久久综合 | a久久久久久 | 国产区在线观看 | 一区二区三区小视频 | 天天躁日日躁狠狠躁白人 | 男女污污网站 | 久久黄色精品视频 | 国产成人精品午夜视频免费 | 少妇精品久久久久久久久久 | 日韩一区二区三区在线视频 | 午夜av电影 | 日本欧美大片 | 国产成人精品久久二区二区 | 夜夜爽99久久国产综合精品女不卡 | 浮生影院免费观看中文版 | 一区| 久久亚洲二区 | 日韩色综合 | 成人在线精品 | 午夜影视免费片在线观看 | 精品久久久网站 | 久草在线在线精品观看 | 久久精品国产久精国产 | 欧美乱码精品一区二区三区 | 中文字幕日韩欧美一区二区三区 | 视频国产一区 | 亚洲综合成人网 | 中文字幕国产一区 | 亚洲综合久久久 | 91久久国产综合久久91精品网站 | 亚洲福利一区二区 | 国产亚洲一区二区三区 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 日本一区二区视频 | 午夜国产羞羞视频免费网站 | 久久免费小视频 | 久草资源网站 | 亚洲狠狠 |