iOS 中的文件存储

作者: codeing小牛 | 来源:发表于2016-09-02 08:51 被阅读1070次

    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 用于存放临时文件(应用被关闭时会被清除)

    相关文章

      网友评论

        本文标题:iOS 中的文件存储

        本文链接:https://www.haomeiwen.com/subject/wsacettx.html