欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ios開發(fā)數(shù)據(jù)緩存,ios開發(fā)cache緩存機(jī)制

ios中關(guān)于方法緩存cache策略

文章部分出于自己的理解,有不對(duì)的地方,希望大家指正。

在光山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,光山網(wǎng)站建設(shè)費(fèi)用合理。

實(shí)例對(duì)象我們可以看作是一個(gè)指針,實(shí)例對(duì)象通過(guò)isa指針指向類對(duì)象,類對(duì)象通過(guò)isa指針指向元類對(duì)象,類對(duì)象和元類對(duì)象本身其實(shí)都是objc_class結(jié)構(gòu)體,里面存放著我們需要的方法列表等。

那么當(dāng)我們方法調(diào)用的時(shí)候,方法是如何緩存的呢?

當(dāng)我們方法調(diào)用的時(shí)候,首先通過(guò)isa指針找到類對(duì)象,然后在類對(duì)象的方法列表里面查找相對(duì)應(yīng)的方法,找到以后會(huì)加入到我們方法緩存里面,等下次我們?cè)僬{(diào)用的時(shí)候,首先會(huì)先從緩存里面去查找相關(guān)方法,更加的效率。

那如果我們調(diào)用的是父類里面的方法呢,其實(shí)父類對(duì)象里面的方法是不可以緩存到子類方法緩存列表里面的,所以,當(dāng)我們調(diào)用的是父類對(duì)象里面的方法的時(shí)候,其方法不會(huì)在子類對(duì)象方法緩存列表里面進(jìn)行緩存。

元類對(duì)象的相關(guān)緩存同類對(duì)象。

至于緩存擴(kuò)容和具體的緩存策略:

在arm64結(jié)構(gòu),也就是真機(jī)環(huán)境下,剛開始初始化的緩存方法的容器的長(zhǎng)度2,當(dāng)容器的長(zhǎng)度小于8時(shí),是滿容量了才擴(kuò)容。當(dāng)容器的長(zhǎng)度大于8時(shí),是7/8擴(kuò)容。也就是說(shuō)當(dāng)容器的長(zhǎng)度為8時(shí),容器可以存儲(chǔ)8個(gè)方法。當(dāng)容器的長(zhǎng)度為16時(shí),當(dāng)?shù)?5個(gè)方法需要存儲(chǔ)進(jìn)來(lái)的時(shí)候,容器就要擴(kuò)容了。

在x86_64架構(gòu)下,剛開始初始化的容器的長(zhǎng)度為4,是3/4擴(kuò)容。這里的3/4擴(kuò)容指的是:如果容器的長(zhǎng)度為4,當(dāng)?shù)?個(gè)數(shù)據(jù)需要存儲(chǔ)的時(shí)候,就要擴(kuò)容了。如果容器的長(zhǎng)度為8,當(dāng)?shù)?個(gè)數(shù)據(jù)需要存儲(chǔ)的時(shí)候,就要擴(kuò)容了。也就是說(shuō)容器只能存儲(chǔ)容器長(zhǎng)度的3/4減1個(gè)方法。

還有一點(diǎn)就是:當(dāng)容器擴(kuò)容之后,前面存儲(chǔ)的方法也會(huì)隨之清空。

參考鏈接:

iOS開發(fā)之?dāng)?shù)據(jù)存儲(chǔ)以及刪除

iOS本地?cái)?shù)據(jù)保存有多種方式,歸納如下:

本章不僅是學(xué)習(xí)多種數(shù)據(jù)存儲(chǔ)方式,也可學(xué)習(xí)到其他知識(shí)點(diǎn),下面就讓我們?cè)敿?xì)來(lái)看:

具體方法為:

第一步:獲得文件即將保存的路徑,并生成在該路徑下的文件:

第二步:往文件中寫入/讀取:

方法一:

方法二:

方法三:

2.NSUserDefaults:是一個(gè)單例對(duì)象,在整個(gè)應(yīng)用程序的生命周期中都只有一個(gè)實(shí)例。用來(lái)保存應(yīng)用程序設(shè)置和屬性、用戶保存的數(shù)據(jù)。存儲(chǔ)在沙盒的Library/Preference中,NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。寫入和讀取都比較簡(jiǎn)單,如下:

寫入:

NSString *str = [userDefault objectForKey:@"zhigang"];

@interface Person : NSObject NSCoding//遵守NSCoding協(xié)議

@property (nonatomic,strong) NSString *name;

@property (nonatomic,assign) NSInteger age;

@end

解檔操作:

同樣調(diào)用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可

[NSKeyedUnarchiver unarchiveObjectWithFile:path];

NSMutableData *data = [NSMutableData data];

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

[archiver encodeObject:person forKey:@"person"];

[archiver encodeObject:bir forKey:@"bir"];

// 存檔完畢(一定要調(diào)用這個(gè)方法)

[archiver finishEncoding];

[data writeToFile:path atomically:YES];

NSData *undata = [NSData dataWithContentsOfFile:path];

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

[unarchiver decodeObjectForKey:@"person"];

[unarchiver decodeObjectForKey:@"bir"];

// 恢復(fù)完畢

[unarchiver finishDecoding];

ios開發(fā)數(shù)據(jù)緩存如何獲取服務(wù)端最新數(shù)據(jù)

方法一:一般將服務(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ù)。

IOS中的緩存

NSCache是蘋果系統(tǒng)提供的一個(gè)緩存框架,用法和NSMutableDictionary 相似。都是通過(guò)setValue: forKey: 設(shè)置值、和objectForKey 取值,

但還是有區(qū)別:

設(shè)置代理

需要類遵守協(xié)議NSCacheDelegate

把數(shù)據(jù)寫入NSCache緩存

讀取內(nèi)存緩存NSCache

刪除 NSCache數(shù)據(jù)

代理方法

即將回收清理cache的時(shí)候調(diào)用改方法

1.獲取根目錄

let homePath = NSHomeDirectory()

2.獲取其他目錄

獲取沙盒目錄路徑可以通過(guò) NSSearchPathForDirectoriesInDomains 方法,該方法有三個(gè)數(shù):

iOS開發(fā)中為什么要使用緩存

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

拿到本地?cái)?shù)據(jù)摘要傳給后臺(tái),后臺(tái)判斷數(shù)據(jù)是否發(fā)生了變化,如果沒(méi)有變化就不給返回這個(gè)接口的大量數(shù)據(jù),如果發(fā)生了變化就返回這個(gè)接口的大量數(shù)據(jù)。

網(wǎng)站名稱:ios開發(fā)數(shù)據(jù)緩存,ios開發(fā)cache緩存機(jī)制
網(wǎng)址分享:http://chinadenli.net/article5/dsiigii.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站軟件開發(fā)外貿(mào)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)公司品牌網(wǎng)站設(shè)計(jì)動(dòng)態(tài)網(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)

搜索引擎優(yōu)化