good

IOS 存储方式(PList、NSUserDefaults、归档

2021-08-11  本文已影响0人  Yison_a169

一、PList(XML属性列表)

iOS开发,plist文件读写那些事 - 简书 (jianshu.com)


二、NSUserDefaults

常用存储

NSUserDefaults存储轻量级 的本地数据 ,比如要保存一个登陆界面的数据,用户名、密码之类的。

存储类型

支持的数据类型有NSString、 NSNumber、NSInteger、NSFloat、BOOL、NSArray、NSDictionary、NSDate、等系统定义的数据类型。

存储位置

用NSUserDefaults存储的数据下次程序运行的时候依然存在 .它的数据存储在应用程序内置的一个plist文件里, 在/Library/Prefereces沙盒路径下.

例子:

 // 1. 创建NSUserDefaults单例:
  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

  // 2. 数据写入:
    // 通过 key 值 来存入 和 读取数据
  [defaults setInteger:23 forKey:@"myInteger"];
    // 注意:对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性

  // 3. 将数据 立即存入到 磁盘:
  [defaults synchronize];

  // 4. 通过key值 按照写入对应类型 读取数据 有返回值
  NSInteger *myInteger = [defaults integerForKey:@"myInteger"];

移除数据

- removeObjectForKey;

立即写入 synchronize

NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:

[userDefault synchronize];

将自定义类型数据读写 NSUserDefaults 中

使用NSKeyedArchiver 对数据进行归档 反归档(将自定义类型转换为NSData类型:)

#import <Foundation/Foundation.h>

@interface Student : NSObject  <NSCoding>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *sex;
@property (nonatomic, assign) NSInteger age;

@end



#import "Student.h"

@implementation Student
// 归档
-(void)encodeWithCoder:(NSCoder *)aCoder{
    
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
}
// 反归档
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeObjectForKey:@"age"];
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
    }
    return self;
}
@end

写入、读取

    #写入
    // 首先,要建立一个可变数组来存储 NSDate对象
    Student *student = [[Student alloc] init];
    // 下面进行的是对student对象的 name, age, sex 赋值
    student.name = @"张三";
    student.age = @"20";
    student.sex = @"男";
    // 将student对象转换成为NSData类型
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
    // 保存学生信息
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    [user setObject:data forKey:@"oneStudent"];

    #读取
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    // 读取data数据
    NSData *data = [user objectForKey:@"oneStudent"];
    // 将data类型转换成student类型
    Student *student = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"%@", student.name);
    NSLog(@"%@", student.age);
    NSLog(@"%@", student.sex);

NSuserDefaults 的坑
iOS 最终,我还是决定放弃使用NSUserDefaults了 - 简书 (jianshu.io)


三、归档

归档:,就是将数据写到一个文件里面去。一般我们的应用的变量常量之类的数据都是在内存里面的,只要APP关闭,这些数据都会丢失。但是把数据存储到文件里面去,就能将数据保存到本地磁盘里面(目前iOS基本就是在沙盒里面操作了),不管是APP关闭还是重启设备,下次启动APP的时候都能够读出来。

解档:(别人也叫反归档),就是将数据从文件里面读取出来。在程序里面使用。

【iOS】数据持久化:使用NSKeyedArchiver进行数据归档 - 简书 (jianshu.com)


四:CoreData

iOS 开发Core Data使用方法 – 技术狗 (jishudog.com)


五:文件操作

IOS 开发文件操作——NSFileManager - 星语海蓝 - 博客园 (cnblogs.com)
(15条消息) iOS文件操作_你有故事,我囿酒-CSDN博客

参考:
iOS开发 - 关于 NSUserDefaults 的使用 - 简书 (jianshu.com)

上一篇下一篇

猜你喜欢

热点阅读