iOS開發之數據存儲之NSData

1、概述編碼

使用archiveRootObject:toFile:方法能夠將一個對象直接寫入到一個文件中,但有時候可能想將多個對象寫入到同一個文件中,那麼就要使用NSData來進行歸檔對象。atom

NSData能夠爲一些數據提供臨時存儲空間,以便隨後寫入文件,或者存放從磁盤讀取的文件內容。可使用[NSMutableData data]建立可變數據空間。code

2、歸檔2Person對象到同一文件中對象

歸檔(編碼):內存

// 新建一塊可變數據區it

NSMutableData *data = [NSMutableData data];table

 

// 將數據區鏈接到一個NSKeyedArchiver對象coding

NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];方法

 

// 開始存檔對象,存檔的數據都會存儲到NSMutableData中im

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

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

 

// 存檔完畢(必定要調用這個方法)

[archiver finishEncoding];

 

// 將存檔的數據寫入文件

[data writeToFile:path atomically:YES];

3、從同一文件中恢復2Person對象

恢復(解碼):

// 從文件中讀取數據

NSData *data = [NSData dataWithContentsOfFile:path];

 

// 根據數據,解析成一個NSKeyedUnarchiver對象

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

Person *person1 = [unarchiver decodeObjectForKey:@"person1"];

Person *person2 = [unarchiver decodeObjectForKey:@"person2"];

 

// 恢復完畢

[unarchiver finishDecoding];

4、利用歸檔實現深複製

好比對一個Person對象進行深複製:

// 臨時存儲person1的數據

NSData *data =

[NSKeyedArchiver archivedDataWithRootObject:person1];

 

// 解析data,生成一個新的Person對象

Student *person2 =

[NSKeyedUnarchiver unarchiveObjectWithData:data];

// 分別打印內存地址

NSLog(@"person1:0x%x", person1); // person1:0x7177a60

NSLog(@"person2:0x%x", person2); // person2:0x7177cf0

相關文章
相關標籤/搜索