1 NSKeydArchiver
1.1 基本类型 (NSString NSArray NSDictionary NSData NSSet NSNumber)可以直接进行归档和反归档(归档后用户不可以查看归档文件中的内容)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filepath = [path stringByAppendingPathComponent:@"filename"];
NSNumber *num = @19 ;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:num];
NSNumber *resultnum = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[NSKeyedArchiver archiveRootObject:num toFile:filepath];
NSNumber *resultnum1 = [NSKeyedUnarchiver unarchiveObjectWithFile:filepath];
1.2/*若归档的对象为自定义对象 需要自定义的类遵守NSCoding 协议 同时实现两个方法 */
#import <Foundation/Foundation.h>
@interface CellModel : NSObject<NSCoding> // 遵守协议
/*在.m 文件中需要实现的方法*/
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.MenuName forKey:@"MenuName"];
[aCoder encodeInteger:self.Depth forKey:@"Depth"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.MenuName = [aDecoder decodeObjectForKey:@"MenuName"];
self.Depth = [aDecoder decodeIntegerForKey:@"Depth"];
}
return self ;
}
/*实现对自定义对象的归档和反归档*/
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];
CellModel *mod = [NSKeyedUnarchiver unarchiveObjectWithData:data];
/* 将对象归档到文件中 */
[NSKeyedArchiver archiveRootObject:model toFile:path];//返回值为bool类型
CellModel *mod = [NSKeyedUnarchiver unarchiveObjectWithFile:path];//返回值为id类型
/* 如果数组中存的是自定义对象 无法直接存入默认设置时 可以采用该方法进行存储*/
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_dataArr];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"custemMenu"];
/* 数据的读取*/
NSArray *menuarr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
// 通过归档写入的文件无法再app外部打开 只能反归档来读取里面的内容
2 write 写入方式(默认存储为txt文件)
// 可以写入NSdata NSDictionary NSArray 类型的数据 file名没有后缀的话默认存储为txt文档,后缀为plist 只能存储字典和数组
每次写入新数据都会把原来的数据覆盖掉
BOOL bl1 = [data writeToFile:datapath atomically:YES];
NSData *resuldata = [NSData dataWithContentsOfFile:datapath];
NSDictionary *dic = @{@"name":@"laowang"};
BOOL bl2 = [dic writeToFile:datapath atomically:YES];
NSDictionary *resultdic = [[NSDictionary alloc]initWithContentsOfFile:datapath];
NSArray *array = @[@"小灰",@"小白",@"小黑"];
BOOL bl3 = [array writeToFile:datapath atomically:YES];
NSArray *resultarr = [[NSArray alloc]initWithContentsOfFile:datapath];
3 Sqlite
4 CoreData
1 程序中文件的存储位置 document library(caches preferece) temp
// document 用于存放需要备份的重要文件
// cache 用于存放缓存文件 (会定时清理)preference 存储用户偏好设置
// tmp 用于存放临时文件(应用被关闭时会被清除)