iOS 中的文件存儲(chǔ)

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ì)被清除)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容