如果實現(xiàn)接口數(shù)據(jù)沒有變化使用緩存的功能?

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