最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中的NSURLCache數(shù)據(jù)緩存類用法解析

 更新時(shí)間:2016年06月30日 09:12:31   作者:琿少  
iOS App中具體緩存操作的管理我們通常是用NSURLCache類來(lái)實(shí)現(xiàn)的,下面我們就來(lái)看一下iOS中的NSURLCache數(shù)據(jù)緩存類用法解析:

 在IOS應(yīng)用程序開(kāi)發(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)求。下面將介紹如何在IOS設(shè)備中進(jìn)行緩存。

 內(nèi)存緩存我們可以使用sdk中的NSURLCache類。NSURLRequest需要一個(gè)緩存參數(shù)來(lái)說(shuō)明它請(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)求失敗;用于沒(méi)有建立網(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ù)。

 一些常用方法與屬性:
 //獲取當(dāng)前應(yīng)用的緩存管理對(duì)象
+ (NSURLCache *)sharedURLCache;
//設(shè)置自定義的NSURLCache作為應(yīng)用緩存管理對(duì)象
+ (void)setSharedURLCache:(NSURLCache *)cache;
//初始化一個(gè)應(yīng)用緩存對(duì)象
/*
memoryCapacity 設(shè)置內(nèi)存緩存容量
diskCapacity 設(shè)置磁盤緩存容量
path 磁盤緩存路徑
內(nèi)容緩存會(huì)在應(yīng)用程序退出后 清空 磁盤緩存不會(huì)
*/
- (instancetype)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(nullable NSString *)path;
//獲取某一請(qǐng)求的緩存
- (nullable NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;
//給請(qǐng)求設(shè)置指定的緩存
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request;
//移除某個(gè)請(qǐng)求的緩存
- (void)removeCachedResponseForRequest:(NSURLRequest *)request;
//移除所有緩存數(shù)據(jù)
- (void)removeAllCachedResponses;
//移除某個(gè)時(shí)間起的緩存設(shè)置
- (void)removeCachedResponsesSinceDate:(NSDate *)date NS_AVAILABLE(10_10, 8_0);
//內(nèi)存緩存容量大小
@property NSUInteger memoryCapacity;
//磁盤緩存容量大小
@property NSUInteger diskCapacity;
//當(dāng)前已用內(nèi)存容量
@property (readonly) NSUInteger currentMemoryUsage;
//當(dāng)前已用磁盤容量
@property (readonly) NSUInteger currentDiskUsage;

簡(jiǎn)單例子:

#import

@interface ViewController : UIViewController

@property (strong, nonatomic) NSURLConnection *connection;
@property (strong, nonatomic) NSURLCache *urlCache;
@property (strong, nonatomic) NSURL *url;
@property (strong, nonatomic) NSMutableURLRequest *request;

- (IBAction)reloadWebView:(UIButton *)sender;

@end

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *paramURLAsString= @"http://blog.sina.com.cn/u/2526279194";
    self.urlCache = [NSURLCache sharedURLCache];
  
    [self.urlCache setMemoryCapacity:1*1024*1024];
    //創(chuàng)建一個(gè)nsurl
    self.url = [NSURL URLWithString:paramURLAsString];
    //創(chuàng)建一個(gè)請(qǐng)求
    self.request=[NSMutableURLRequest requestWithURL:self.url
                                                   cachePolicy:NSURLRequestUseProtocolCachePolicy
                                   timeoutInterval:30.0f];
    [self.myWebView loadRequest:self.request];
}

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


- (IBAction)reloadWebView:(UIButton *)sender {

    //從請(qǐng)求中獲取緩存輸出
    NSCachedURLResponse *response =[self.urlCache cachedResponseForRequest:self.request];
    //判斷是否有緩存
    if (response != nil){
        NSLog(@"如果有緩存輸出,從緩存中獲取數(shù)據(jù)");
        [self.request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
    }
    [self.myWebView loadRequest:self.request];
   
    self.connection = nil;
  
    NSURLConnection *newConnection = [[NSURLConnection alloc] initWithRequest:self.request
                                                                     delegate:self
                                                             startImmediately:YES];
    self.connection = newConnection;
}

使用下面代碼,我將請(qǐng)求的過(guò)程打印出來(lái)
- (void)  connection:(NSURLConnection *)connection
  didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"將接收輸出");
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
             willSendRequest:(NSURLRequest *)request
            redirectResponse:(NSURLResponse *)redirectResponse{
    NSLog(@"即將發(fā)送請(qǐng)求");
    return(request);
}
- (void)connection:(NSURLConnection *)connection
    didReceiveData:(NSData *)data{
    NSLog(@"接受數(shù)據(jù)");
    NSLog(@"數(shù)據(jù)長(zhǎng)度為 = %lu", (unsigned long)[data length]);
}
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse *)cachedResponse{
    NSLog(@"將緩存輸出");
    return(cachedResponse);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"請(qǐng)求完成");
}
- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error{
    NSLog(@"請(qǐng)求失敗");
}

@end

第一次打印結(jié)果如下
 

2013-01-31 15:28:29.923 NSURLCacheDemo[27848:907] 即將發(fā)送請(qǐng)求
2013-01-31 15:28:30.043 NSURLCacheDemo[27848:907] 將接收輸出
2013-01-31 15:28:30.045 NSURLCacheDemo[27848:907] 接受數(shù)據(jù)
2013-01-31 15:28:30.047 NSURLCacheDemo[27848:907] 數(shù)據(jù)長(zhǎng)度為 = 30047
2013-01-31 15:28:30.095 NSURLCacheDemo[27848:907] 接受數(shù)據(jù)
2013-01-31 15:28:30.098 NSURLCacheDemo[27848:907] 數(shù)據(jù)長(zhǎng)度為 = 3575
2013-01-31 15:28:30.102 NSURLCacheDemo[27848:907] 接受數(shù)據(jù)
2013-01-31 15:28:30.104 NSURLCacheDemo[27848:907] 數(shù)據(jù)長(zhǎng)度為 = 1482
2013-01-31 15:28:30.105 NSURLCacheDemo[27848:907] 將緩存輸出
2013-01-31 15:28:30.107 NSURLCacheDemo[27848:907] 請(qǐng)求完成

第二次點(diǎn)擊打印結(jié)果如下

2013-01-31 15:28:31.599 NSURLCacheDemo[27848:907] 如果有緩存輸出,從緩存中獲取數(shù)據(jù)
2013-01-31 15:28:31.607 NSURLCacheDemo[27848:907] 即將發(fā)送請(qǐng)求
2013-01-31 15:28:31.840 NSURLCacheDemo[27848:907] 將接收輸出
2013-01-31 15:28:31.843 NSURLCacheDemo[27848:907] 接受數(shù)據(jù)
2013-01-31 15:28:31.845 NSURLCacheDemo[27848:907] 數(shù)據(jù)長(zhǎng)度為 = 35104
2013-01-31 15:28:31.846 NSURLCacheDemo[27848:907] 請(qǐng)求完成

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

相關(guān)文章

  • iOS 頁(yè)面滑動(dòng)與標(biāo)題切換顏色漸變的聯(lián)動(dòng)效果實(shí)例

    iOS 頁(yè)面滑動(dòng)與標(biāo)題切換顏色漸變的聯(lián)動(dòng)效果實(shí)例

    本篇文章主要介紹了iOS 頁(yè)面滑動(dòng)與標(biāo)題切換顏色漸變的聯(lián)動(dòng)效果實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • iOS拍照后圖片自動(dòng)旋轉(zhuǎn)90度的完美解決方法

    iOS拍照后圖片自動(dòng)旋轉(zhuǎn)90度的完美解決方法

    今天開(kāi)發(fā)一個(gè)拍照獲取照片的功能的時(shí)候, 發(fā)現(xiàn)上傳之后圖片會(huì)自動(dòng)旋轉(zhuǎn)90.在測(cè)試中發(fā)現(xiàn)只要是圖片大于2M, 系統(tǒng)就會(huì)自動(dòng)翻轉(zhuǎn)照片。下面小編通過(guò)本文給大家分享下解決辦法
    2016-12-12
  • iOS UISegmentControl實(shí)現(xiàn)自定義分欄效果

    iOS UISegmentControl實(shí)現(xiàn)自定義分欄效果

    這篇文章主要為大家詳細(xì)介紹了iOS UISegmentControl實(shí)現(xiàn)自定義分欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析iOS中視頻播放的幾種方案

    淺析iOS中視頻播放的幾種方案

    還記得剛學(xué)iOS的時(shí)候嗎?那個(gè)時(shí)候驚訝于各種牛逼的功能只需要幾句簡(jiǎn)單的代碼就可以完成。視頻播放也是這樣,IOS中視頻播放有好幾種方式,這篇文章就給大家整理這幾種方案優(yōu)缺點(diǎn)與實(shí)現(xiàn)過(guò)程。
    2016-08-08
  • iOS實(shí)現(xiàn)壓縮圖片上傳功能

    iOS實(shí)現(xiàn)壓縮圖片上傳功能

    這篇文章主要介紹了iOS實(shí)現(xiàn)壓縮圖片上傳功能,iOS中常常需要打開(kāi)相機(jī),選擇圖片上傳或者拍照上傳,如何實(shí)現(xiàn)壓縮圖片并上傳圖片,想要了解的朋友可以參考一下
    2016-04-04
  • iOS經(jīng)驗(yàn)之初始化方法中不該設(shè)置self.view的屬性淺析

    iOS經(jīng)驗(yàn)之初始化方法中不該設(shè)置self.view的屬性淺析

    這篇文章主要給大家介紹了關(guān)于iOS經(jīng)驗(yàn)之初始化方法中不該設(shè)置self.view的屬性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-09-09
  • iOS實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)標(biāo)簽

    iOS實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)標(biāo)簽

    這篇文章主要為大家詳細(xì)介紹了iOS動(dòng)態(tài)自適應(yīng)標(biāo)簽的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫

    iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • iOS中的AutoLayout使用實(shí)踐總結(jié)

    iOS中的AutoLayout使用實(shí)踐總結(jié)

    在對(duì)界面進(jìn)行布局的時(shí)候,我們經(jīng)常使用AutoLayout對(duì)界面進(jìn)行布局適配。下面這篇文章主要給大家介紹了iOS中AutoLayout使用實(shí)踐的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-12-12
  • iOS圖片模糊效果的實(shí)現(xiàn)方法

    iOS圖片模糊效果的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了iOS圖片模糊效果的三種實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評(píng)論

宜兴市| 建湖县| 杭锦后旗| 朔州市| 军事| 城固县| 龙游县| 黄龙县| 任丘市| 同仁县| 鄂温| 巴楚县| 南投市| 永福县| 白银市| 平乐县| 怀集县| 扶绥县| 驻马店市| 青龙| 连山| 商都县| 怀远县| 屯昌县| 巴中市| 湖南省| 邳州市| 乌苏市| 白河县| 孝义市| 峨山| 达孜县| 高唐县| 永春县| 开鲁县| 寿阳县| 桃源县| 白山市| 灵台县| 贵溪市| 兰西县|