如果實(shí)現(xiàn)接口數(shù)據(jù)沒(méi)有變化使用緩存的功能?
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)城西,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
拿到本地?cái)?shù)據(jù)摘要傳給后臺(tái),后臺(tái)判斷數(shù)據(jù)是否發(fā)生了變化,如果沒(méi)有變化就不給返回這個(gè)接口的大量數(shù)據(jù),如果發(fā)生了變化就返回這個(gè)接口的大量數(shù)據(jù)。
緩存怎么清理
方法/步驟
我們?cè)谟秒娔X很久時(shí),電腦就會(huì)留下一些用過(guò)的痕跡,這個(gè)就叫做緩存,緩存有很多種比如來(lái)自網(wǎng)頁(yè)和windows等
其實(shí)清理緩存有或多種,可以利用電腦自帶的工具清理還可以使用應(yīng)用軟件來(lái)清理,下面就來(lái)介紹幾個(gè)辦法
方法一:首先選擇你要清理的磁盤。如C盤首先選擇c盤的屬性,然后選擇磁盤清理
或者利用瀏覽器的自帶功能來(lái)清理,工具然后是刪除,這一方法主要是清除瀏覽器中的緩存
最后就是利用軟件啦,可以使用魔方等,點(diǎn)擊清理就可以啦~
本文介紹在iOS開(kāi)發(fā)中,Swift實(shí)現(xiàn)清除緩存功能。主要分為統(tǒng)計(jì)緩存文件大小和刪除緩存文件兩個(gè)步驟:
NSCache是蘋(píng)果系統(tǒng)提供的一個(gè)緩存框架,用法和NSMutableDictionary 相似。都是通過(guò)setValue: forKey: 設(shè)置值、和objectForKey 取值,
但還是有區(qū)別:
設(shè)置代理
需要類遵守協(xié)議NSCacheDelegate
把數(shù)據(jù)寫(xiě)入NSCache緩存
讀取內(nèi)存緩存NSCache
刪除 NSCache數(shù)據(jù)
代理方法
即將回收清理cache的時(shí)候調(diào)用改方法
1.獲取根目錄
let homePath = NSHomeDirectory()
2.獲取其他目錄
獲取沙盒目錄路徑可以通過(guò) NSSearchPathForDirectoriesInDomains 方法,該方法有三個(gè)數(shù):
筆者性懶,腹中無(wú)墨
app嵌html屢見(jiàn)不鮮, 本文描述加載簡(jiǎn)單的html網(wǎng)頁(yè)。
首先說(shuō)明需求: 有網(wǎng)的狀態(tài)直接從獲取html網(wǎng)頁(yè)并且緩存, 無(wú)網(wǎng)狀態(tài)先從緩存讀取html, 若不成功則加載本地html文件, 并且將本地html文件寫(xiě)入緩存, 以便下次讀取.
1.加載html網(wǎng)頁(yè), viewWillAppear或者viewDidLoad.
以下QAUrl均為html完整的url
2.若成功, 就在成功的代理方法里, 將網(wǎng)頁(yè)端html寫(xiě)入緩存
3.不成功,在失敗的代理方法里, 加載磁盤緩存或者本地html,其中isNetConnected是指是否連接到互聯(lián)網(wǎng), 默認(rèn)是true,加載失敗后置為false.
fileprivate var isNetConnected: Bool = true // 是否連接到互聯(lián)網(wǎng)
4.同樣,此次成功后,在代理方法里,將本地html文件寫(xiě)入緩存
5.代理方法的里很簡(jiǎn)潔
6.需要注意的是
(1)拼接緩存地址時(shí), 如果html的URL類似于" ",不能作為地址拼接,否則無(wú)法緩存.
(2)筆者將拼接地址統(tǒng)一寫(xiě)成"/Caches/feedback.html",若有新的緩存,則地址被覆蓋,不會(huì)導(dǎo)致緩存多個(gè)相同文件,一般無(wú)需清理或者導(dǎo)致內(nèi)存警告
(3)本文不涉及緩存圖片, js交互等問(wèn)題
7.補(bǔ)充:
開(kāi)發(fā)過(guò)程中,筆者又遇到了一個(gè)問(wèn)題,有網(wǎng)的情況下,網(wǎng)頁(yè)也可能出現(xiàn)加載不成功.這個(gè)時(shí)候如果只是加載網(wǎng)頁(yè)就會(huì)什么都沒(méi)有.所以在viewWillAppear或者viewDidLoad里應(yīng)該有個(gè)判斷
如果請(qǐng)求request返回的finish是true即成功,則加載html網(wǎng)頁(yè),不成功則加載緩存.
方法一:一般將服務(wù)器第一次返回的數(shù)據(jù)保存在沙盒里面。這樣在手機(jī)斷網(wǎng)的情況下可以從本地讀取數(shù)據(jù)了。
1.保存到沙盒的代碼:
[plain] view
plaincopy
+ (void)saveCache:(int)type andID:(int)_id andString:(NSString *)str;
{
NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];
NSString * key = [NSString stringWithFormat:@"detail-%d-%d",type, _id];
[setting setObject:str forKey:key];
[setting synchronize];
}
2.讀取本地沙盒的代碼
讀取之前首先根據(jù)type和Id判斷本地是否有
[plain] view
plaincopy
+ (NSString *)getCache:(int)type andID:(int)_id
{
NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];
NSString *key = [NSString stringWithFormat:@"detail-%d-%d",type, _id];
NSString *value = [settings objectForKey:key];
return value;
}
如果沙盒里面有數(shù)據(jù)
[plain] view
plaincopy
NSString *value = [Tool getCache:5 andID:self.QiuTime];
if (value) {
NSDictionary *backdict = [value JSONValue];
if ([backdict objectForKey:@"items"]) {
NSArray *array=[NSArray arrayWithArray:[backdict objectForKey:@"items"]];
for (NSDictionary *qiushi in array) {
QiuShi *qs=[[[QiuShi alloc]initWithDictionary:qiushi] autorelease];
[self.list addObject:qs];
}
}
[self.tableView reloadData];
}
[self.tableView tableViewDidFinishedLoadingWithMessage:@"數(shù)據(jù)全部加載完了.."];
self.tableView.reachedTheEnd = YES;
方法二:使用ASIHTTPRequest和ASIDownloadCache實(shí)現(xiàn)本地緩存
1、設(shè)置全局的Cache
在AppDelegate.h中添加一個(gè)全局變量
[plain] view plaincopy
@interface AppDelegate : UIResponder
{
ASIDownloadCache *myCache;
}
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic,retain) ASIDownloadCache *myCache;
在AppDelegate.m中的- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代碼
[plain] view plaincopy
//自定義緩存
ASIDownloadCache *cache = [[ASIDownloadCache alloc] init];
self.myCache = cache;
[cache release];
//設(shè)置緩存路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
[self.myCache setStoragePath:[documentDirectory stringByAppendingPathComponent:@"resource"]];
[self.myCache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];
在AppDelegate.m中的dealloc方法中添加如下語(yǔ)句
[plain] view plaincopy
[myCache release];
到這里為止,就完成了全局變量的聲明。
2、設(shè)置緩存策略
在實(shí)現(xiàn)ASIHTTPRequest請(qǐng)求的地方設(shè)置request的存儲(chǔ)方式,代碼如下
[plain] view plaincopy
NSString *str = @"";
NSURL *url = [NSURL URLWithString:str];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
//獲取全局變量
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//設(shè)置緩存方式
[request setDownloadCache:appDelegate.myCache];
//設(shè)置緩存數(shù)據(jù)存儲(chǔ)策略,這里采取的是如果無(wú)更新或無(wú)法聯(lián)網(wǎng)就讀取緩存數(shù)據(jù)
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
request.delegate = self;
[request startAsynchronous];
3、清理緩存數(shù)據(jù)
我在這里采用的是手動(dòng)清理數(shù)據(jù)的方式,在適當(dāng)?shù)牡胤教砑尤缦麓a,我將清理緩存放在了應(yīng)用的設(shè)置模塊:
[plain] view plaincopy
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.myCache clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
這里清理的是ASICachePermanentlyCacheStoragePolicy這種存儲(chǔ)策略的緩存數(shù)據(jù),如果更換其他的參數(shù)的話,即可清理對(duì)應(yīng)存儲(chǔ)策略的緩存數(shù)據(jù)。
新聞標(biāo)題:ios開(kāi)發(fā)本地緩存,ios開(kāi)發(fā)本地緩存怎么開(kāi)
文章起源:http://chinadenli.net/article0/dsdiooo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)