欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

ios讀取json并緩存

iOS開(kāi)發(fā)中,讀取服務(wù)器返回的JSON數(shù)據(jù)是非常常見(jiàn)的一種操作,一般來(lái)說(shuō),我們會(huì)通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取JSON數(shù)據(jù),然后將其解析為模型對(duì)象再進(jìn)行頁(yè)面展示。如果每次用戶(hù)打開(kāi)應(yīng)用程序都要重新發(fā)起一次請(qǐng)求獲取數(shù)據(jù),無(wú)疑會(huì)嚴(yán)重影響應(yīng)用的性能和用戶(hù)體驗(yàn)。因此,在iOS開(kāi)發(fā)中,將JSON數(shù)據(jù)緩存到本地是很有必要的一種技巧。

//讀取JSON數(shù)據(jù)并緩存
-(void)loadData{
//判斷緩存是否存在
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [cachePath stringByAppendingPathComponent:@"data.json"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *dict = nil;
if ([fileManager fileExistsAtPath:filePath]) {
dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
//如果緩存存在并且不為空,則直接讀取緩存
if (dict) {
//將緩存數(shù)據(jù)轉(zhuǎn)換成模型對(duì)象
[self parseDataWithDict:dict];
return;
}
}
//如果緩存不存在或者為空,則發(fā)起網(wǎng)絡(luò)請(qǐng)求獲取數(shù)據(jù)
NSURLSession *session = [NSURLSession sharedSession];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/data.json"]];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
//將響應(yīng)數(shù)據(jù)轉(zhuǎn)換成JSON字符串
NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//將JSON字符串轉(zhuǎn)換成字典
NSDictionary *jsonDict = [self dictionaryWithJsonString:jsonString];
//將字典存儲(chǔ)到本地緩存
[jsonDict writeToFile:filePath atomically:YES];
//將字典數(shù)據(jù)轉(zhuǎn)換成模型對(duì)象
[self parseDataWithDict:jsonDict];
}else{
NSLog(@"請(qǐng)求失敗:%@",error);
}
}];
[task resume];
}

在上述代碼中,我們首先判斷本地緩存是否存在,如果存在且不為空,則直接讀取緩存數(shù)據(jù)并轉(zhuǎn)換成對(duì)應(yīng)的模型對(duì)象;如果本地緩存不存在或者為空,則通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取JSON數(shù)據(jù),并將其轉(zhuǎn)換成字典對(duì)象存儲(chǔ)到本地,然后再將字典對(duì)象轉(zhuǎn)換成模型對(duì)象。

通過(guò)將JSON數(shù)據(jù)緩存到本地,可以大大提高應(yīng)用程序的性能和用戶(hù)體驗(yàn),同時(shí)還可以減輕服務(wù)器的壓力。