真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios開發(fā)歸檔,iOS檔案

ios開發(fā)中數(shù)據(jù)持久化有哪幾種,分別什么時間使用

1、plist文件(屬性列表),通常用于儲存用戶設(shè)置,也可以用于存儲捆綁的信息;

創(chuàng)新互聯(lián)公司專注于玉龍企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。玉龍網(wǎng)站建設(shè)公司,為玉龍等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

2、preference(偏好設(shè)置),常用于保存少量數(shù)據(jù);

3、NSKeyedArchiver(歸檔),將內(nèi)存中的對象實例保存成binary到磁盤并且可以逆向這個過程用來保存用戶操作狀態(tài)等;

4、SQLite 3,使用數(shù)據(jù)庫進(jìn)行存儲;

5、CoreData,它提供了對象-關(guān)系映射(ORM)的功能,即能夠?qū)C對象轉(zhuǎn)化成數(shù)據(jù),保存在SQLite數(shù)據(jù)庫文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫中的數(shù)據(jù)還原成OC對象。

iOS開發(fā)中怎樣保證數(shù)據(jù)的安全性,有幾種方

簡單的數(shù)據(jù),對安全性要求不高的數(shù)據(jù)可以使用 NSUserDefaults (本質(zhì)上是一個plist)來存儲相對復(fù)雜點的數(shù)據(jù),可以使用coredata (本質(zhì)上是使用sqlite 來存儲)對安全性要求較高的數(shù)據(jù),可以使用keychain 來存儲。同樣調(diào)用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可 。

缺點:歸檔的形式來保存數(shù)據(jù),只能一次性歸檔保存以及一次性解壓。所以只能針對小量數(shù)據(jù),而且對數(shù)據(jù)操作比較笨拙,即如果想改動數(shù)據(jù)的某一小部分,還是需要解壓整個數(shù)據(jù)或者歸檔整個數(shù)據(jù)。

iOS歸檔看這篇就夠了

之前將數(shù)據(jù)存儲到本地,只能是字符串、數(shù)組、字典、NSNuber、BOOL等容器類對象,不能將自定義對象進(jìn)行保存,而通過歸檔能將所有的對象轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)存儲到文件中。

當(dāng)遇到有結(jié)構(gòu)有組織的數(shù)據(jù)時,比如字典,數(shù)組,自定義的對象等在存儲時需要轉(zhuǎn)換為字節(jié)流NSData類型數(shù)據(jù),再通過寫入文件來進(jìn)行存儲。

字節(jié)流轉(zhuǎn)換為字典,數(shù)組,自定義的類等

歸檔保存數(shù)據(jù),只能一次性歸檔保存以及一次性解壓。所以只能針對小量數(shù)據(jù),而且對數(shù)據(jù)操作比較笨拙,即如果想改動數(shù)據(jù)的某一小部分,還是需要解壓整個數(shù)據(jù)或者歸檔整個數(shù)據(jù)。

1.有些應(yīng)用支持一個離線緩存,也就是說當(dāng)手機沒聯(lián)網(wǎng)時,可以將手機有網(wǎng)時的數(shù)據(jù)存放在本地,當(dāng)手機沒網(wǎng)時,從本地中取出來這些數(shù)據(jù)展示。

2.電商場景中,可以緩存用戶搜索歷史記錄。

1.對Foundation框架的系統(tǒng)對象進(jìn)行歸檔

2.對自定義的對象進(jìn)行歸檔

3.同時對不同類型的多個對象進(jìn)行歸檔

方法介紹

使用例子:

歸檔:

反歸檔:

除了字典和數(shù)組等系統(tǒng)對象外,開發(fā)中往往需要自定義一些對象,如:定義一個person類。

person.h

person.m

對person對象進(jìn)行歸檔

反歸檔

方法介紹

使用例子:

歸檔:

反歸檔:

iOS歸檔如何創(chuàng)建多個數(shù)據(jù)模型?

第一步:要將數(shù)組中的對象需要遵循 NSCoding 協(xié)議,實現(xiàn)協(xié)議中的兩個方法。

第二步:通過 NSKeyedArchive 進(jìn)行快速歸檔,它會自動寫到文件中,讀取可以使用 NSKeyedUnarchiver 來解壓 代碼例子在網(wǎng)上都能找到

ios開發(fā)中 歸檔 arc的文件怎么創(chuàng)建

xcode5.0之前的版本只需要在創(chuàng)建項目的時候勾選ARC就可以了,xcode5以上版本自動就是ARC的.不需要其它操作

iOS--歸檔與解歸檔

之前將數(shù)據(jù)保存本地,只能是字符串、數(shù)組、字典、NSNuber、BOOL等容器類對象對象,不能將所有對象都給保存,而采用歸檔能將所有的對象轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)保存在文件中,并通過解歸檔讓將文件里面保存的數(shù)據(jù)讀取出來

之前我們給通訊錄添加一個聯(lián)系人只能是將添加的人放到一個字典中,然后將這個字典放到數(shù)組中,最終將數(shù)組寫入文件中

當(dāng)我們需要顯示這些聯(lián)系人時,要從文件中將這個數(shù)組讀取出來,還要將數(shù)據(jù)里面的一個個字典轉(zhuǎn)化成model,放到一個新數(shù)組里

而現(xiàn)在我們可以使用歸檔在添加的時候就將這一個個聯(lián)系人的信息轉(zhuǎn)化成model,將這些model直接放到一個數(shù)組里,需要展示的時候,在從文件中讀取出來數(shù)據(jù),此時這個數(shù)組里面存放直接就是一個個model

有些應(yīng)用支持一個離線緩存,也就是說當(dāng)手機沒聯(lián)網(wǎng)時,可以將手機有網(wǎng)時的數(shù)據(jù)存放在本地,當(dāng)手機沒網(wǎng)時,從本地中取出來這些數(shù)據(jù)展示

1、所屬的類遵守NSCoding協(xié)議

2、實現(xiàn)協(xié)議里面的歸檔方法

- (void)encodeWithCoder:(NSCoder *)aCoder

3、實現(xiàn)協(xié)議里面的解歸檔方法

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder

1、指定將對象放在哪個文件中,歸檔后的文件,后綴要求是archiver

[NSHomeDirectory() stringByAppendingPathComponent:@"data.archiver"];

2、將對象歸檔到指定的路徑中

[NSKeyedArchiver archiveRootObject:name toFile:path];

3、將歸檔后的數(shù)據(jù)提取出來

[NSKeyedUnarchiver unarchiveObjectWithFile:path];

1、讓這個類遵循

2、實現(xiàn)歸檔方法,aCoder就是歸檔時傳過來的歸檔對象,對象被歸檔時會調(diào)用這個方法

- (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeInteger:self.age forKey:@"age"];

[aCoder encodeObject:self.sex forKey:@"sex"];

}

3、實現(xiàn)解歸檔方法,對象解歸檔是會調(diào)用這個方法

- (instancetype)initWithCoder:(NSCoder *)aDecoder{

//解歸檔時會產(chǎn)生一個Person對象,這里是給這個Person對象賦值

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.age = [aDecoder decodeIntegerForKey:@"age"];

self.sex = [aDecoder decodeObjectForKey:@"sex"];

}

return self;

}

1、歸檔

1)準(zhǔn)備一個可變的data對象,通過歸檔對象將多個數(shù)據(jù)存在一個data對象里,最終將這個data寫入文件

NSMutableData *data = [NSMutableData data];

2)archiver初始化的時候包裝一個可變的data對象

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

3)通過歸檔對象將這些數(shù)據(jù)轉(zhuǎn)化成二進(jìn)制,并保存在一個data對象里

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

[archiver encodeInteger:age forKey:@"age"];

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

4)轉(zhuǎn)化完畢,意思是結(jié)束使用歸檔對象將上面的數(shù)據(jù)保存在了data里面

[archiver finishEncoding];

5)將轉(zhuǎn)化好的data寫入文件

[data writeToFile:path atomically:YES];

2、解歸檔

1)將路徑里的二進(jìn)制數(shù)據(jù)給取出來

NSMutableData *data = [NSMutableData dataWithContentsOfFile:path];

2)將二進(jìn)制數(shù)據(jù)包裝在一個解歸檔對象中

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

3)通過解歸檔對象將二進(jìn)制數(shù)據(jù)分別給反序列化

NSString *name = [unarchiver decodeObjectForKey:@"name"];

NSInteger age = [unarchiver decodeIntegerForKey:@"age"];

NSString *sex = [unarchiver decodeObjectForKey:@"sex"];

1、模擬網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行本地緩存? ?

1)修改新工程自帶的ViewController.h 如下? ? ?

#importUIKit/UIKit.h

@interface ViewController : UITableViewController

@end

2)在AppDelegate.m里面自定義window,

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

[self.window makeKeyAndVisible];

//報錯后,記得導(dǎo)入ViewController? #import "ViewController.h"

self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];

3)新建一個InfoModel類,? ? ??

InfoModel.h? ? ??

#importFoundation/Foundation.h

//對象要歸檔必須要遵守NSCoding協(xié)議? ? ? ?

@interface InfoModel : NSObjectNSCoding

@property(nonatomic,copy) NSString *name;

@property(nonatomic,copy) NSString *phone;

@end

InfoModel.m

#import "InfoModel.h"

@implementation InfoModel

- (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.phone forKey:@"phone"];

}

- (instancetype)initWithCoder:(NSCoder *)aDecoder{

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.phone = [aDecoder decodeObjectForKey:@"phone"];

}

return self;

}

@end

4) ViewController.m

#import "ViewController.h"

#import "InfoModel.h"

//報錯,將課件中的MJExtension文件夾拖到工程中

#import "MJExtension.h"

//模擬服務(wù)器路徑

#define kLocalPath [NSHomeDirectory() stringByAppendingPathComponent:@"data.archiver"]

//模擬本地緩存路徑

#define kServerPath [[NSBundle mainBundle] pathForResource:@"Connect" ofType:@"plist"]

@interface ViewController ()

{

NSMutableArray *dataArray;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self loadData];

}

- (void)loadData{

//準(zhǔn)備數(shù)據(jù)

dataArray = [self fetchData];

if(dataArray == nil){

NSLog(@"請檢查網(wǎng)絡(luò)設(shè)置");

return;

}

[self.tableView reloadData];

}

- (NSMutableArray *)fetchData{

//1、先從服務(wù)器獲取數(shù)據(jù)

NSMutableArray *tempArray = [NSMutableArray arrayWithContentsOfFile:kServerPath];

if (tempArray == nil) {

//2、如果從服務(wù)器獲取數(shù)據(jù)失敗,則從本地緩存中讀取數(shù)據(jù)

tempArray = [NSKeyedUnarchiver unarchiveObjectWithFile:kLocalPath];

}else{

//3、如果從服務(wù)器獲取數(shù)據(jù)成功,則將數(shù)據(jù)通過MJExtension框架,轉(zhuǎn)化為model

tempArray = [InfoModel mj_objectArrayWithKeyValuesArray:tempArray];

//4、將最新從服務(wù)器獲取到數(shù)據(jù)保存到本地

[NSKeyedArchiver archiveRootObject:tempArray toFile:kLocalPath];

}

return tempArray;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return dataArray.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *cellID = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell == nil) {

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID];

}

InfoModel *model = dataArray[indexPath.row];

cell.textLabel.text = model.name;

cell.detailTextLabel.text = model.phone;

return cell;

}

@end


當(dāng)前文章:ios開發(fā)歸檔,iOS檔案
標(biāo)題鏈接:http://weahome.cn/article/dsddicc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部