iOS開發(fā)本地緩存(數(shù)據(jù)離線緩存、讀取徐钠、釋放)

本人ios初學(xué)者癌刽,為自己學(xué)習(xí)方便,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡(jiǎn)書里尝丐,僅作為自己學(xué)習(xí)方便使用显拜,如果作者疑此行為侵權(quán),請(qǐng)隨時(shí)聯(lián)系本人刪除爹袁,如有共同學(xué)習(xí)者復(fù)制此文章远荠,請(qǐng)注明原出處


為了節(jié)約流量,同時(shí)也是為了更好的用戶體驗(yàn)失息,目前很多應(yīng)用都使用本地緩存機(jī)制譬淳,其中以網(wǎng)易新聞的緩存功能最為出色档址。我自己的應(yīng)用也想加入本地緩存的功能,于是我從網(wǎng)上查閱了相關(guān)的資料邻梆,發(fā)現(xiàn)總體上說(shuō)有兩種方法守伸。一種是自己寫緩存的處理,一種是采用ASIHTTPRequest中的ASIDownloadCache浦妄。

方法一:一般將服務(wù)器第一次返回的數(shù)據(jù)保存在沙盒里面含友。這樣在手機(jī)斷網(wǎng)的情況下可以從本地讀取數(shù)據(jù)了。

1.保存到沙盒的代碼:


+(void)saveCache:(int)typeandID:(int)_idandString:(NSString*)str;

{

NSUserDefaults*setting=[NSUserDefaultsstandardUserDefaults];

NSString*key=[NSStringstringWithFormat:@"detail-%d-%d",type,_id];

[settingsetObject:strforKey:key];

[settingsynchronize];

}

2.讀取本地沙盒的代碼

讀取之前首先根據(jù)type和Id判斷本地是否有


+(NSString*)getCache:(int)typeandID:(int)_id

{

NSUserDefaults*settings=[NSUserDefaultsstandardUserDefaults];

NSString*key=[NSStringstringWithFormat:@"detail-%d-%d",type,_id];

NSString*value=[settingsobjectForKey:key];

returnvalue;

}

如果沙盒里面有數(shù)據(jù)


NSString*value=[ToolgetCache:5andID:self.QiuTime];

if(value){

NSDictionary*backdict=[valueJSONValue];

if([backdictobjectForKey:@"items"]){

NSArray*array=[NSArrayarrayWithArray:[backdictobjectForKey:@"items"]];

for(NSDictionary*qiushiinarray){

QiuShi*qs=[[[QiuShialloc]initWithDictionary:qiushi]autorelease];

[self.listaddObject:qs];

}

}

[self.tableViewreloadData];

}

[self.tableViewtableViewDidFinishedLoadingWithMessage:@"數(shù)據(jù)全部加載完了.."];

self.tableView.reachedTheEnd=YES;

方法二:使用ASIHTTPRequest和ASIDownloadCache實(shí)現(xiàn)本地緩存

1校辩、設(shè)置全局的Cache

在AppDelegate.h中添加一個(gè)全局變量

@interfaceAppDelegate:UIResponder

{

ASIDownloadCache*myCache;

}

@property(strong,nonatomic)UIWindow*window;

@property(nonatomic,retain)ASIDownloadCache*myCache;

在AppDelegate.m中的-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions方法中添加如下代碼

//自定義緩存

ASIDownloadCache*cache=[[ASIDownloadCachealloc]init];

self.myCache=cache;

[cacherelease];

//設(shè)置緩存路徑

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentDirectory=[pathsobjectAtIndex:0];

[self.myCachesetStoragePath:[documentDirectorystringByAppendingPathComponent:@"resource"]];

[self.myCachesetDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];

在AppDelegate.m中的dealloc方法中添加如下語(yǔ)句

[myCacherelease];

到這里為止窘问,就完成了全局變量的聲明。

2宜咒、設(shè)置緩存策略

在實(shí)現(xiàn)ASIHTTPRequest請(qǐng)求的地方設(shè)置request的存儲(chǔ)方式惠赫,代碼如下

NSString*str=@"http://....../getPictureNews.aspx";

NSURL*url=[NSURLURLWithString:str];

ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];

//獲取全局變量

AppDelegate*appDelegate=[[UIApplicationsharedApplication]delegate];

//設(shè)置緩存方式

[requestsetDownloadCache:appDelegate.myCache];

//設(shè)置緩存數(shù)據(jù)存儲(chǔ)策略,這里采取的是如果無(wú)更新或無(wú)法聯(lián)網(wǎng)就讀取緩存數(shù)據(jù)

[requestsetCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];

request.delegate=self;

[requeststartAsynchronous];

3故黑、清理緩存數(shù)據(jù)

我在這里采用的是手動(dòng)清理數(shù)據(jù)的方式儿咱,在適當(dāng)?shù)牡胤教砑尤缦麓a,我將清理緩存放在了應(yīng)用的設(shè)置模塊:

AppDelegate*appDelegate=[[UIApplicationsharedApplication]delegate];

[appDelegate.myCacheclearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];

這里清理的是ASICachePermanentlyCacheStoragePolicy這種存儲(chǔ)策略的緩存數(shù)據(jù)场晶,如果更換其他的參數(shù)的話混埠,即可清理對(duì)應(yīng)存儲(chǔ)策略的緩存數(shù)據(jù)。

(參考:http://zycto.blog.163.com/blog/static/17152400201110221340738/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诗轻,一起剝皮案震驚了整個(gè)濱河市钳宪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扳炬,老刑警劉巖吏颖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恨樟,居然都是意外死亡半醉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門劝术,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缩多,“玉大人,你說(shuō)我怎么就攤上這事养晋〕倪海” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵匙握,是天一觀的道長(zhǎng)咆槽。 經(jīng)常有香客問我,道長(zhǎng)圈纺,這世上最難降的妖魔是什么秦忿? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任麦射,我火速辦了婚禮,結(jié)果婚禮上灯谣,老公的妹妹穿的比我還像新娘潜秋。我一直安慰自己,他們只是感情好胎许,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布峻呛。 她就那樣靜靜地躺著,像睡著了一般辜窑。 火紅的嫁衣襯著肌膚如雪钩述。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天穆碎,我揣著相機(jī)與錄音牙勘,去河邊找鬼。 笑死所禀,一個(gè)胖子當(dāng)著我的面吹牛方面,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播色徘,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼恭金,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了褂策?” 一聲冷哼從身側(cè)響起横腿,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辙培,沒想到半個(gè)月后蔑水,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扬蕊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丹擎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尾抑。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒂培,靈堂內(nèi)的尸體忽然破棺而出再愈,到底是詐尸還是另有隱情,我是刑警寧澤护戳,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布翎冲,位于F島的核電站,受9級(jí)特大地震影響媳荒,放射性物質(zhì)發(fā)生泄漏抗悍。R本人自食惡果不足惜驹饺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缴渊。 院中可真熱鬧赏壹,春花似錦、人聲如沸衔沼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)指蚁。三九已至菩佑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凝化,已是汗流浹背擎鸠。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缘圈,地道東北人劣光。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糟把,于是被迫代替她去往敵國(guó)和親绢涡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)本地緩存(數(shù)據(jù)離線緩存数苫、讀取、釋放)_異客_新浪博客
    fengguohui閱讀 819評(píng)論 0 2
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā),例如說(shuō)新浪微博会宪、微信等唉工,這些應(yīng)用本身可...
    lichengjin閱讀 3,657評(píng)論 2 7
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,139評(píng)論 30 470
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,352評(píng)論 0 35
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,975評(píng)論 0 7