亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中的NSURLCache數據緩存類用法解析

2020-07-26 03:19:03
字體:
來源:轉載
供稿:網友

 在IOS應用程序開發中,為了減少與服務端的交互次數,加快用戶的響應速度,一般都會在IOS設備中加一個緩存的機制。使用緩存的目的是為了使用的應用程序能更快速的響應用戶輸入,是程序高效的運行。有時候我們需要將遠程web服務器獲取的數據緩存起來,減少對同一個url多次請求。下面將介紹如何在IOS設備中進行緩存。

 內存緩存我們可以使用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 *)sharedURLCache;
//設置自定義的NSURLCache作為應用緩存管理對象
+ (void)setSharedURLCache:(NSURLCache *)cache;
//初始化一個應用緩存對象
/*
memoryCapacity 設置內存緩存容量
diskCapacity 設置磁盤緩存容量
path 磁盤緩存路徑
內容緩存會在應用程序退出后 清空 磁盤緩存不會
*/
- (instancetype)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(nullable NSString *)path;
//獲取某一請求的緩存
- (nullable NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;
//給請求設置指定的緩存
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request;
//移除某個請求的緩存
- (void)removeCachedResponseForRequest:(NSURLRequest *)request;
//移除所有緩存數據
- (void)removeAllCachedResponses;
//移除某個時間起的緩存設置
- (void)removeCachedResponsesSinceDate:(NSDate *)date NS_AVAILABLE(10_10, 8_0);
//內存緩存容量大小
@property NSUInteger memoryCapacity;
//磁盤緩存容量大小
@property NSUInteger diskCapacity;
//當前已用內存容量
@property (readonly) NSUInteger currentMemoryUsage;
//當前已用磁盤容量
@property (readonly) NSUInteger currentDiskUsage;

簡單例子:

#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];
    //創建一個nsurl
    self.url = [NSURL URLWithString:paramURLAsString];
    //創建一個請求
    self.request=[NSMutableURLRequest requestWithURL:self.url
                                                   cachePolicy:NSURLRequestUseProtocolCachePolicy
                                   timeoutInterval:30.0f];
    [self.myWebView loadRequest:self.request];
}

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


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

    //從請求中獲取緩存輸出
    NSCachedURLResponse *response =[self.urlCache cachedResponseForRequest:self.request];
    //判斷是否有緩存
    if (response != nil){
        NSLog(@"如果有緩存輸出,從緩存中獲取數據");
        [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;
}

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

@end

第一次打印結果如下
 

2013-01-31 15:28:29.923 NSURLCacheDemo[27848:907] 即將發送請求2013-01-31 15:28:30.043 NSURLCacheDemo[27848:907] 將接收輸出2013-01-31 15:28:30.045 NSURLCacheDemo[27848:907] 接受數據2013-01-31 15:28:30.047 NSURLCacheDemo[27848:907] 數據長度為 = 300472013-01-31 15:28:30.095 NSURLCacheDemo[27848:907] 接受數據2013-01-31 15:28:30.098 NSURLCacheDemo[27848:907] 數據長度為 = 35752013-01-31 15:28:30.102 NSURLCacheDemo[27848:907] 接受數據2013-01-31 15:28:30.104 NSURLCacheDemo[27848:907] 數據長度為 = 14822013-01-31 15:28:30.105 NSURLCacheDemo[27848:907] 將緩存輸出2013-01-31 15:28:30.107 NSURLCacheDemo[27848:907] 請求完成

第二次點擊打印結果如下

2013-01-31 15:28:31.599 NSURLCacheDemo[27848:907] 如果有緩存輸出,從緩存中獲取數據2013-01-31 15:28:31.607 NSURLCacheDemo[27848:907] 即將發送請求2013-01-31 15:28:31.840 NSURLCacheDemo[27848:907] 將接收輸出2013-01-31 15:28:31.843 NSURLCacheDemo[27848:907] 接受數據2013-01-31 15:28:31.845 NSURLCacheDemo[27848:907] 數據長度為 = 351042013-01-31 15:28:31.846 NSURLCacheDemo[27848:907] 請求完成

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕成人在线| 不卡av在线网站| 在线色欧美三级视频| 欧美贵妇videos办公室| 成人免费大片黄在线播放| 久久久国产成人精品| 中文字幕日韩视频| 久久精品视频在线| 国产黑人绿帽在线第一区| 精品久久久91| 久久亚洲春色中文字幕| 日韩免费电影在线观看| 欧美日本黄视频| 亚洲精品乱码久久久久久金桔影视| 久久天天躁夜夜躁狠狠躁2022| 亚洲电影免费观看| 欧美一级片在线播放| 日韩在线观看免费高清完整版| 视频在线观看99| 日韩不卡中文字幕| 欧美激情在线观看| 精品日本高清在线播放| 精品高清美女精品国产区| 97视频网站入口| 国产高清视频一区三区| www.久久撸.com| 欧美日韩亚洲视频一区| 97视频在线播放| 亚洲成人免费在线视频| 97在线看免费观看视频在线观看| 亚洲黄色成人网| 亚洲精品国产精品久久清纯直播| 精品亚洲国产视频| 日韩电影在线观看永久视频免费网站| 国产精品男人爽免费视频1| 久操成人在线视频| 久久在线免费观看视频| 一本色道久久综合狠狠躁篇的优点| 精品动漫一区二区| 亚洲黄色免费三级| 亚洲女人天堂成人av在线| 亚洲福利视频在线| 国产精品日韩在线| 一本色道久久88精品综合| 久久av在线看| 九九热这里只有精品免费看| 91精品视频专区| 欧美极品少妇xxxxⅹ免费视频| 亚洲欧美日韩一区二区三区在线| 欧美在线免费看| 国产欧美在线视频| 国产精品看片资源| 精品国内产的精品视频在线观看| 97国产精品人人爽人人做| 亚洲人成电影在线观看天堂色| 欧美激情性做爰免费视频| 亚洲视频在线看| 欧美色视频日本高清在线观看| 亚洲三级免费看| 国模精品一区二区三区色天香| 欧美精品精品精品精品免费| 欧美肥臀大乳一区二区免费视频| 欧美日韩免费区域视频在线观看| 精品国产一区二区三区久久久| 国产综合久久久久久| 国产成人精品免高潮在线观看| 午夜精品理论片| 国产精品日韩欧美大师| 欧美精品生活片| 欧美一级片一区| 亚洲精品福利在线| 日本精品视频在线观看| 欧美日韩国产在线| 国产一区二区三区中文| 国产激情久久久| 亚洲综合中文字幕68页| 国产精品欧美激情在线播放| 中文字幕不卡av| 久久精品色欧美aⅴ一区二区| 另类色图亚洲色图| 一区二区福利视频| xxxx欧美18另类的高清| 日韩欧美在线视频免费观看| 久久99视频精品| 国产精品国语对白| 奇米影视亚洲狠狠色| 欧美日韩美女在线| 亚洲女人天堂网| 亚洲国产精品资源| 久久亚洲精品成人| 亚洲人精品午夜在线观看| 国内精品美女av在线播放| 亚洲国产精久久久久久| 成人深夜直播免费观看| 日韩精品中文字幕在线观看| 欧美在线免费观看| 国产精品久久久久影院日本| 尤物九九久久国产精品的特点| 欧美高清视频在线观看| 日韩成人在线视频观看| 国产精品高潮呻吟久久av无限| 亚洲自拍偷拍福利| 国产一区二区三区直播精品电影| 亚洲欧美自拍一区| 日本成人在线视频网址| 夜夜嗨av色综合久久久综合网| 亚洲精品久久久久国产| 91免费的视频在线播放| 中文字幕久热精品视频在线| 久久久久久com| 国产精品国产亚洲伊人久久| 色先锋久久影院av| 国产91|九色| 91啪国产在线| 久久中文字幕视频| 久久久视频精品| 欧美激情中文网| 欧美黄色成人网| 国产日韩在线观看av| 国产精品久久久久久久久久小说| 国产精品久久久久久久久久久不卡| 中文字幕久精品免费视频| 久久久999精品视频| 国产精品综合网站| 亚洲人成网站777色婷婷| 国产亚洲精品91在线| 亚洲国内高清视频| 日本精品中文字幕| 国产美女久久精品| 亚洲香蕉成人av网站在线观看| 欧美高清性猛交| 亚洲第一页中文字幕| 亚洲日本中文字幕免费在线不卡| 成人国产精品久久久久久亚洲| 在线视频精品一| 久久人人爽人人爽爽久久| 国产精品video| 欧美最近摘花xxxx摘花| 日韩精品福利在线| 欧美视频在线免费| 欧美国产日本高清在线| 欧美乱大交xxxxx另类电影| 久久久黄色av| 91亚洲精品在线| 久久精品国产欧美激情| 亚洲欧美另类在线观看| 久久久久一本一区二区青青蜜月| 久久视频在线观看免费| 欧美日韩精品在线播放| 国产成人一区二区在线| 久久久久久久久国产精品| 日本精品久久电影| 国产精品视频一| 中文字幕精品一区二区精品| 久久91亚洲精品中文字幕| 亚洲一区二区三区在线视频| 亚洲成人动漫在线播放| 国产精品美乳在线观看| 九九精品视频在线| 91久久精品一区| 亚洲激情成人网| 亚洲欧美成人网| 亚洲色图色老头| 亚洲精品美女在线观看播放|