php nsdata,iOS开发之数据存储之NSData
1、概述
使用archiveRootObject:toFile:方法可以將一個(gè)對(duì)象直接寫入到一個(gè)文件中,但有時(shí)候可能想將多個(gè)對(duì)象寫入到同一個(gè)文件中,那么就要使用NSData來進(jìn)行歸檔對(duì)象。
NSData可以為一些數(shù)據(jù)提供臨時(shí)存儲(chǔ)空間,以便隨后寫入文件,或者存放從磁盤讀取的文件內(nèi)容。可以使用[NSMutableData data]創(chuàng)建可變數(shù)據(jù)空間。
2、歸檔2個(gè)Person對(duì)象到同一文件中
歸檔(編碼):
// 新建一塊可變數(shù)據(jù)區(qū)
NSMutableData *data = [NSMutableData data];
// 將數(shù)據(jù)區(qū)連接到一個(gè)NSKeyedArchiver對(duì)象
NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
// 開始存檔對(duì)象,存檔的數(shù)據(jù)都會(huì)存儲(chǔ)到NSMutableData中
[archiver encodeObject:person1 forKey:@"person1"];
[archiver encodeObject:person2 forKey:@"person2"];
// 存檔完畢(一定要調(diào)用這個(gè)方法)
[archiver finishEncoding];
// 將存檔的數(shù)據(jù)寫入文件
[data writeToFile:path atomically:YES];
3、從同一文件中恢復(fù)2個(gè)Person對(duì)象
恢復(fù)(解碼):
// 從文件中讀取數(shù)據(jù)
NSData *data = [NSData dataWithContentsOfFile:path];
// 根據(jù)數(shù)據(jù),解析成一個(gè)NSKeyedUnarchiver對(duì)象
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
Person *person1 = [unarchiver decodeObjectForKey:@"person1"];
Person *person2 = [unarchiver decodeObjectForKey:@"person2"];
// 恢復(fù)完畢
[unarchiver finishDecoding];
4、利用歸檔實(shí)現(xiàn)深復(fù)制
比如對(duì)一個(gè)Person對(duì)象進(jìn)行深復(fù)制:
// 臨時(shí)存儲(chǔ)person1的數(shù)據(jù)
NSData *data =
[NSKeyedArchiver archivedDataWithRootObject:person1];
// 解析data,生成一個(gè)新的Person對(duì)象
Student *person2 =
[NSKeyedUnarchiver unarchiveObjectWithData:data];
// 分別打印內(nèi)存地址
NSLog(@"person1:0x%x", person1); // person1:0x7177a60
NSLog(@"person2:0x%x", person2); // person2:0x7177cf0
總結(jié)
以上是生活随笔為你收集整理的php nsdata,iOS开发之数据存储之NSData的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 扫雷游戏计算机版,扫雷经典版电脑版
- 下一篇: 渐开线曲线方程c语言,proe常用曲线方