* 我們在對網絡請求的時候,可以使用系統為我們提供的NSURLRequest和NSURLConnection,它基本能實現我們的基本功能。
* 但是有時我們使用第三方封裝的庫,可以輕易實現使用系統方法比較難以實現的功能。
* 常見的第三方庫有:ASIHTTPRequest, AFNetworking, MKNetworkKit.
* 關于第三方庫基本使用,官網上都有詳細的介紹。
* 今天就以ASIHTTPRequest為例,實現數據的本地緩存。
* 最通俗易懂的解釋就是用戶體驗。
* 在沒用網絡的情況下,可以訪問以前訪問過得數據。
* 訪問的數據,如果緩存中有數據,不用向服務器發送請求,可以節省用戶的流量。
這幅圖中的信息是通過網絡請求獲取的,如果在下次打開這個APP的時候沒用網絡,我們還想將上面的數據顯示出來,就是得使用緩存機制,緩存機制是怎么實現的呢?
緩存的基本原理:
* 建立一個緩存區域,設置緩存路徑,設置緩存策略。
* 在網絡請求的時候設置為下載緩存。緩存的數據會存儲到指定位置,我們可以根據緩存策略讀取緩存數據。
注意:
下面的代碼大概意思是:
建立緩存類;設置緩存路徑;設置緩存策略(后面詳述);將緩存類賦給一個屬性;
ASIDownloadCache *cache = [[ASIDownloadCache alloc]init];NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];NSString *filePath = [documentsPath stringByAppendingPathComponent:@"CacheFiled"];[cache setStoragePath:filePath];[cache setDefaultCachePolicy:ASIAskServerIfModifiedCachePolicy |ASIFallbackToCacheIfLoadFailsCachePolicy];[self setMyCache:cache];
下一步我們就可以發起請求了:
請求路徑;請求的數據設置緩存;存儲策略(后面講述);發起請求;獲取請求的數據;
NSURL *url = [NSURL URLWithString:@"http://apis.juhe.cn/cook/query?key=c84890ed990675f3c454cb2e86fc0a75&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3"];ASIHTTPRequest *request = [[ASIHTTPRequest alloc]initWithURL:url];[request setDownloadCache:[self myCache]];[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];[request startSynchronous];NSData *data = request.responseData;
緩存策略,存儲策略,見名知意,就是緩存是采取的策略和存儲是采取的策略。
比如使用緩存的時候,是先讀取緩存,還是先請求網路,還是網絡讀取失敗后讀取緩存。
存儲策略是采取臨時性存儲,還是永久性存儲。
下面的這張圖記錄了ASI的緩存策略,多種緩存策略可以配合使用,例如上面的代碼的緩存策略就是配合著使用的,先向服務器請求數據,失敗后加載本地緩存。
關于存儲策略:大概分為兩種
新聞熱點
疑難解答