使用快取的目的是為了使用的應用程式能更快速的響應使用者輸入,是程式高效的執行。有時候我們需要將遠端
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
還提供了很多方法,來方便我們實現應用程式的快取機制。
//
// rootviewcontroller.h
// cachedemo
// (記憶體快取demo-宣告)
// created by imilo teana on 12-2-1.//
#import @inte***ce rootviewcontroller : uiviewcontroller
- (ibaction)cachepress:(uibutton *)button;
@end //
// rootviewcontroller.m
// cachedemo
// (記憶體快取demo-定義)
// created by imilo teana on 12-2-1.//
#import "rootviewcontroller.h"
@inte***ce rootviewcontroller()
@property(nonatomic, retain) nsurlconnection *connection;
@end
@implementation rootviewcontroller
@synthesize connection = _connection;
#pragma mark -
#pragma mark - super code
- (void)dealloc
- (void)viewdidload
- (void)viewdidunload
- (bool)shouldautorotatetointe***ceorientation:(uiinte***ceorientation)inte***ceorientation
#pragma mark -
#pragma mark - user code
- (ibaction)cachepress:(uibutton *)button
//設定快取
nsurlcache *urlcache = [nsurlcache sharedurlcache];
//設定快取大小未1m
[urlcache setmemorycapacity:1*1024*1024];
//建立url
nsurl *url = [nsurl urlwithstring:urlstr];
//建立請求
nsmutableurlrequest *request =
[nsmutableurlrequest requestwithurl:url
cachepolicy:nsurlrequestuseprotocolcachepolicy //快取策略(預設)
timeoutinterval:60.0f];//
//從請求中獲取快取輸出
nscachedurlresponse *response = [urlcache cachedresponseforrequest:request];
//判斷是否有快取
if (response != nil)
//將鏈結置為空
_connection = nil;
//重新建立鏈結
nsurlconnection *connection =
[[nsurlconnection alloc] initwithrequest:request
delegate:self
startimmediately:yes];
[self setconnection:connection];
[connection release];
connection = nil;}
#pragma mark -
#pragma mark - delegate code
- (void)connection:(nsurlconnection *)connection
idreceiveresponse:(nsurlresponse *)response
- (nsurlrequest *)connection:(nsurlconnection *)connection
willsendrequest:(nsurlrequest *)request
redirectresponse:(nsurlresponse *)redirectresponse
- (void)connection:(nsurlconnection *)connection
didreceivedata:(nsdata *)data
- (nscachedurlresponse *)connection:(nsurlconnection *)connection
willcacheresponse:(nscachedurlresponse *)cachedresponse
- (void)connectiondidfinishloading:(nsurlconnection *)connection
- (void)connection:(nsurlconnection *)connection
didfailwitherror:(nserror *)error
@end
記憶體快取機制
新聞 或者論壇訪問量都很大.而使用者每次瀏覽新聞或者帖子的時候如果去訪問一次資料庫 會造成速度慢.如果把資料庫一些內容載入到記憶體中,則速度會快很多.一般首頁新聞都是僅幾天更新的 我們可以在利用jms 或者 單獨乙個程序來掃瞄資料庫,將近5天的新聞載入到記憶體.或者限制1000條.map cache...
iOS的快取機制
應用需要離線工作的主要原因就是改善應用所表現出的效能。將應用內容快取起來就可以支援離線。我們可以用兩種不同的快取來使應用離線工作。第一種是 按需快取 這種情況下應用快取起請求應答,就和web瀏覽器的工作原理一樣 第二種是 預快取 這種情況是快取全部內容 或者最近n條記錄 以便離線訪問。快取流程 1....
iOS快取機制詳解
應用脫機工的兩種方式 第一種是 按需快取 這種情況下應用快取起請求應答,就和web瀏覽器的工作原理一樣 第二種是 預快取 這種情況是快取全部內容 或者最近n條記錄 以便離線訪問。ios快取機制詳解 借鑑 在眾多可以本地儲存資料的技術中,有三種脫穎而出 url快取 資料模型快取 利用nskeyedar...