1、把任何類型的數據經過一定的加工 歸檔 最終能夠存儲起來
2、自定義了一個類 Class 創建了數據 怎么存起來 -> 二進制數據
歸檔的作用 能夠把我們自己創建的類 存儲起來 壓縮的過程
解歸檔 就是把我們已經歸檔了的數據 再逆轉回來 解壓的過程
<NSCoding協議> 并且實現兩個方法
//歸檔的時候 使用的方法 使用歸檔器 來進行操作
(void)encodeWithCoder:(NSCoder *)aCoder
{
//歸檔 實質 是給 類的成員變量 進行歸檔
//使用歸檔器來進行歸檔
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInteger:_age forKey:@"age"];
[aCoder encodeObject:_ID forKey:@"ID"];
}
//解歸檔的時候 使用的方法 使用解歸檔器 進行解歸檔-
(instancetype)initWithCoder:(NSCoder *)aDecoder
{
//把歸檔了的成員變量都進行解歸檔
self = [super init];
if (self) {
_name =[aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntegerForKey:@"age"];
_ID = [aDecoder decodeObjectForKey:@"ID"];
}
return self;
}
Student * laoWang = [[Student alloc]initWithAge:12 Name:@"laoWang" ID:@"010101"];//現在我們把 這個對象進行歸檔 //歸檔 NSMutableData * data = [[NSMutableData alloc]init]; //把歸檔的數據都寫到data里面 NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; //歸檔器里面可以存放多個數據 [keyed encodeObject:laoWang forKey:@"laoWang"]; [keyed finishEncoding]; //data已經拿到了老王的所有數據 [data writeToFile:@"/Users/apple/Desktop/a" atomically:YES]; //解歸檔 NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"]; [unKeyed finishDecoding]; NSLog(@"%@",someOne);
//main中歸檔解歸檔
//把歸檔的數據都寫到data里面
NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
//歸檔器里面可以存放多個數據
[keyed encodeObject:laoWang forKey:@"laoWang"];
[keyed finishEncoding];
//data已經拿到了老王的所有數據
[data writeToFile:@"/Users/apple/Desktop/a" atomically:YES];
//解歸檔
NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"];
[unKeyed finishDecoding];
二、多個對象的歸檔 如果有關系
Class Student
Class 有 Student
不僅讓Class類 遵守Coding協議 Student也遵守Coding協議