1 NSKeydArchiver
1.1 基本類型 (NSString NSArray NSDictionary NSData NSSet NSNumber)可以直接進(jìn)行歸檔和反歸檔(歸檔后用戶不可以查看歸檔文件中的內(nèi)容)
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/*若歸檔的對(duì)象為自定義對(duì)象 需要自定義的類遵守NSCoding 協(xié)議 同時(shí)實(shí)現(xiàn)兩個(gè)方法 */
#import <Foundation/Foundation.h>
@interface CellModel : NSObject<NSCoding> // 遵守協(xié)議
/*在.m 文件中需要實(shí)現(xiàn)的方法*/
-(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 ;
}
/*實(shí)現(xiàn)對(duì)自定義對(duì)象的歸檔和反歸檔*/
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];
CellModel *mod = [NSKeyedUnarchiver unarchiveObjectWithData:data];
/* 將對(duì)象歸檔到文件中 */
[NSKeyedArchiver archiveRootObject:model toFile:path];//返回值為bool類型
CellModel *mod = [NSKeyedUnarchiver unarchiveObjectWithFile:path];//返回值為id類型
/* 如果數(shù)組中存的是自定義對(duì)象 無法直接存入默認(rèn)設(shè)置時(shí) 可以采用該方法進(jìn)行存儲(chǔ)*/
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_dataArr];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"custemMenu"];
/* 數(shù)據(jù)的讀取*/
NSArray *menuarr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
// 通過歸檔寫入的文件無法再app外部打開 只能反歸檔來讀取里面的內(nèi)容
2 write 寫入方式(默認(rèn)存儲(chǔ)為txt文件)
// 可以寫入NSdata NSDictionary NSArray 類型的數(shù)據(jù) file名沒有后綴的話默認(rèn)存儲(chǔ)為txt文檔,后綴為plist 只能存儲(chǔ)字典和數(shù)組
每次寫入新數(shù)據(jù)都會(huì)把原來的數(shù)據(jù)覆蓋掉
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 程序中文件的存儲(chǔ)位置 document library(caches preferece) temp
// document 用于存放需要備份的重要文件
// cache 用于存放緩存文件 (會(huì)定時(shí)清理)preference 存儲(chǔ)用戶偏好設(shè)置
// tmp 用于存放臨時(shí)文件(應(yīng)用被關(guān)閉時(shí)會(huì)被清除)