美文网首页
A1_数据持久化存储方案:plist、preference、NS

A1_数据持久化存储方案:plist、preference、NS

作者: 求长生 | 来源:发表于2020-06-06 12:11 被阅读0次

    一、NSUserDefaults(Preference偏好设置)
    二、plist存储
    三、归档NSKeyedArchiver
    四、SQLite3
    五、CoreData
    六、FMDB(https://www.cnblogs.com/wendingding/p/3871848.html)

    应用沙盒
    Document:适合存储重要的数据, iTunes同步应用时会同步该文件下的内容,(比如游戏中的存档)
    Library/Caches:适合存储体积大,不需要备份的非重要数据,iTunes不会同步该文件
    Library/Preferences:通常保存应用的设置信息, iTunes会同步
    tmp:保存应用的临时文件,用完就删除,系统可能在应用没在运行时删除该目录下的文件,iTunes不会同步

    NSUserDefault
    NSuserDefault适合存储轻量级的本地数据,支持的数据类型有:NSNumber,NSString,NSDate,NSArray,NSDictionary,BOOL,NSData
    沙盒路径为 Library/Preferences
    文件格式为 .plist

    - (IBAction)userDefaultSave:(id)sender {
        NSArray *testArray = @[@"test1", @"test2", @"test3"];
        [[NSUserDefaults standardUserDefaults] setObject:testArray forKey:@"arrayKey"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    - (IBAction)userDefaultLoad:(id)sender {
        NSArray *testArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayKey"];
        NSLog(@"%@", testArray);
    }
    

    获取沙盒路径
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentFilePath = paths.firstObject;

    二、 plist存储

    - (IBAction)plistSave:(id)sender {
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];
        
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        [dict setObject:@"ran" forKey:@"name"];
        [dict setObject:@"18" forKey:@"age"];
        [dict writeToFile:filePath atomically:YES];
    }
    
    - (IBAction)plistLoad:(id)sender {
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];
        
        NSDictionary *t = [NSDictionary dictionaryWithContentsOfFile:filePath];
        NSLog(@"%@",t);
    }
    

    三、归档NSKeyedArchiver
    1.首先新建类,并遵守NSCoding协议
    @interface Person : NSObject<NSCoding>
    2.实现协议方法

    @implementation Person
    
    - (instancetype)initWithCoder:(NSCoder *)coder
    {
        self = [super init];
        if (self) {
            _name = [coder decodeObjectForKey:@"name"];
            _age = [coder decodeObjectForKey:@"age"];
        }
        return self;
    }
    
    - (void)encodeWithCoder:(NSCoder *)coder
    {
    
        [coder encodeObject:self.name forKey:@"name"];
        [coder encodeObject:self.age forKey:@"age"];
    
    }
    @end
    归档解档
    - (IBAction)archive:(id)sender {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentFilePath = paths.firstObject;
        NSString *filePath = [documentFilePath stringByAppendingPathComponent:@"personModel"];
        
        Person *p1 = [[Person alloc] init];
        p1.name = @"ran";
        p1.age = @"18";
        
        [NSKeyedArchiver archiveRootObject:p1 toFile:filePath];
    }
    
    - (IBAction)unarchive:(id)sender {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentFilePath = paths.firstObject  ;
        NSString *filePath = [documentFilePath stringByAppendingPathComponent:@"personModel"];
        
        Person *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath] ;
        
        NSLog(@"%@", p1.name);
        NSLog(@"%@", p1.age);
    }
    

    数据库
    https://www.jianshu.com/p/cd20f4a06c9d

    相关文章

      网友评论

          本文标题:A1_数据持久化存储方案:plist、preference、NS

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