iOS數據持久化方法:
- 屬性列表 (plist文件), 用 NSUserDefault
- 歸檔 (NSKeyedArchiver) (本質上還是WriteToFile 歸解檔是一種編碼方式)
- 數據庫 (SQlite, CoreData, FMDB(第三方));
- 歸檔: 將復雜對象轉化成 NSData 類型對象數據 (復雜--> 歸檔 --> NSData --> writeToFile)
注意: 歸檔是將對象轉化為數據字節,以文件的形式存在磁盤上. - 反歸檔(解檔): 讀取文件將 NSData 類型數據轉化為復雜對象 (讀取數據 --> NSData -->反歸檔 -- 復雜對象)
<big>歸檔的方式:</big>
1: 對Foundation框架中的對象進行歸檔
2: 對自定義的對象進行歸檔
3: 對自定義的內容進行歸檔
- 注意: 歸檔生成的文檔是加密的不可解的
Foundation框架中對象:
歸檔:
// 1: 創建路徑
NSString *DocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, 4) objectAtIndex:0];
NSString *filrPath = [DocumentsPath stringByAppendingString:@"/file.txt"];
// 2: 歸檔
NSArray *arr = @[@"iOS",@"UI",@"OC",@"C"];
BOOL result = [NSKeyedArchiver archiveRootObject:arr toFile:filrPath];
if (result)
{
NSLog(@"歸檔成功****%@",filrPath);
}
// 3: 不需要結束歸檔```
// 反歸檔:
NSArray newArr = [NSKeyedUnarchiver unarchiveObjectWithFile:filrPath];
NSLog(@"newArr**%@",newArr);```
自定義內容:
// 歸檔:
// 1: 獲取路徑
NSString *rootPath = NSHomeDirectory();
rootPath = [rootPath stringByAppendingString:@"/customFile.txt"];
// 2: 使用Data對象存放歸檔數據
NSMutableData *oldData = [NSMutableData data];
// 3: 創建歸檔工具
NSKeyedArchiver *aa = [[NSKeyedArchiver alloc] initForWritingWithMutableData:oldData];
// 4: 對自定義內容歸檔
[aa encodeObject:@"小皇帝詹姆斯" forKey:@"name"];
[aa encodeObject:@"閃電俠韋德" forKey:@"wife"];
[aa encodeObject:@[@"保羅",@"安東尼"] forKey:@"team"];
// 5: 完成歸檔
[aa finishEncoding];
// 6: 寫入
if ([oldData writeToFile:rootPath atomically:1])
{
NSLog(@"成功******%@",rootPath);
}
//反歸檔
>```code
// 1: 讀取文件 并轉化成NSData類型
NSData *dataNew = [NSData dataWithContentsOfFile:rootPath];
// 2: 根據dataNew創建反歸檔對象
NSKeyedUnarchiver *bb = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNew];
// 3: 反歸檔
NSString *str1 = [bb decodeObjectForKey:@"name"];
NSString *str2 = [bb decodeObjectForKey:@"wife"];
NSArray *str3 = [bb decodeObjectForKey:@"team"];
NSLog(@"str1***%@***str*%@**str3*%@",str1,str2,str3);
// 4:不用寫結束歸檔