//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
一. URL緩存基本概念
NSURLCache 提供了內(nèi)存與磁盤的緩存機(jī)制。
任何通過NSURLConnection 加載的請(qǐng)求都會(huì) NSURLCache 處理踩身,因?yàn)?AFNetworking 使用了NSURLConnection 芍锚,所以也會(huì)被處理挤牛。
當(dāng)完成數(shù)據(jù)的請(qǐng)求后臭家,緩存的相應(yīng)被保存在本地(沙盒目錄為Library/Cache/目錄下,每一個(gè)不同的請(qǐng)求會(huì)生成一個(gè)文件夾房午,保存的文件為NSData文件矿辽。)當(dāng)下一次同樣的請(qǐng)求時(shí),直接從緩存中獲取即可郭厌。
因此網(wǎng)絡(luò)緩存減少了與服務(wù)器的負(fù)擔(dān)袋倔,并提高應(yīng)用程序更好的體驗(yàn)。
二 :設(shè)置NSURLCache
1. 使用URL緩存首先要使NSURLCache進(jìn)行初始化折柠。URL 緩存默認(rèn)大小為Memory4 * 1024 * 1024 btye Disk 20 * 1024 * 1024byts
2. 在首次使用URL換粗之前就初始化NSURLCache宾娜,這樣才能使用URL緩存,因此通常情況下在application: didFinishLaunchingWithOptions--- 初始化扇售,這樣這個(gè)程序所有的NSMutableRequest 都能使用URL緩存前塔。當(dāng)然,你也寫在自己網(wǎng)絡(luò)請(qǐng)求的 單例初始化里
NSURLCache * cache = [[NSURLCachealloc] initWithMemoryCapacity:5 * 1024 * 1024
diskCapacity:25 * 1024 * 1024
diskPath:nil];
[NSURLCachesetSharedURLCache:cache];
三 : 設(shè)置NSMutableURLRequest的requestsetCachePolicy即緩存策略
NSURLRequestUseProtocolCachePolicy= 0,默認(rèn)緩存策略承冰。具體工作:如果一個(gè)NSCachedURLResponse對(duì)于請(qǐng)求并不存在华弓,數(shù)據(jù)將會(huì)從源端獲取。如果請(qǐng)求擁有一個(gè)緩存的響應(yīng)困乒,那么URL加載系統(tǒng)會(huì)檢查這個(gè)響應(yīng)來決定寂屏,如果它指定內(nèi)容必須重新生效的話,將建立一個(gè)連向源端的連接來查看內(nèi)容是否發(fā)生變化。假如內(nèi)容沒有變化凑保,那么響應(yīng)就從本地緩存返回?cái)?shù)據(jù)冈爹。如果內(nèi)容變化了,那么數(shù)據(jù)將從源端獲取欧引。
NSURLRequestReloadIgnoringLocalCacheData = 1,URL應(yīng)該加載源端數(shù)據(jù)频伤,不使用本地緩存數(shù)據(jù)
NSURLRequestReloadIgnoringCacheData =NSURLRequestReloadIgnoringLocalCacheData, 兩個(gè)的設(shè)置相同
NSURLRequestReturnCacheDataElseLoad = 2,指定已存的緩存數(shù)據(jù)應(yīng)該用來響應(yīng)請(qǐng)求,不管它的生命時(shí)長和過期時(shí)間芝此。如果在緩存中沒有已存數(shù)據(jù)來響應(yīng)請(qǐng)求的話憋肖,數(shù)據(jù)從源端加載。
NSURLRequestReturnCacheDataDontLoad = 3,指定已存的緩存數(shù)據(jù)用來滿足請(qǐng)求婚苹,不管生命時(shí)長和過期時(shí)間岸更。如果在緩存中沒有已存數(shù)據(jù)來響應(yīng)URL加載請(qǐng)求的話,不去嘗試從源段加載數(shù)據(jù)膊升,此時(shí)認(rèn)為加載請(qǐng)求失敗怎炊。這個(gè)常量指定了一個(gè)類似于離線模式的行為
NSURLRequestReloadIgnoringLocalAndRemoteCacheData =4,本地緩存數(shù)據(jù)、代理和其他中介都要忽視他們的緩存廓译,直接加載源數(shù)據(jù)
NSURLRequestReloadRevalidatingCacheData = 5指定如果已存的緩存數(shù)據(jù)被提供它的源段確認(rèn)為有效則允許使用緩存數(shù)據(jù)響應(yīng)請(qǐng)求评肆,否則從源段加載數(shù)據(jù)。
只有響應(yīng)http和https的請(qǐng)求會(huì)被緩存非区。ftp和文件協(xié)議當(dāng)被緩存策略允許的時(shí)候嘗試接入源段瓜挽。自定義的NSURLProtocol類能夠保護(hù)緩存,如果它們被選擇使用的話征绸。
示例:
NSMutableURLRequest * request =[NSMutableURLRequest requestWithURL:[NSURLURLWithString:@"http://www.sina.com"]];
[requestsetCachePolicy:NSURLRequestReturnCacheDataDontLoad];
四 :URL緩存的使用
1? 獲取緩存
NSCachedURLResponse * response =[cache cachedResponseForRequest:request];
if (response != nil) {
NSLog(@"有緩存");
[requestsetCachePolicy:NSURLRequestReturnCacheDataDontLoad];
}else{
NSLog(@"沒有緩存");
}