iOS開發之數據存儲之NSData


1、概述

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

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

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

歸檔(編碼):

// 新建一塊可變數據區

NSMutableData *data = [NSMutableData data];

 

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

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

 

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

[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM