iOS数据持久化之属性列表

属性的存储就是对一些属性的持久化,比如 NSString, NSArry, NSDictionary 等,这些属性值可以直接保存在 NSUserDefault 里面。
一、NSUserDefault 实现持久化
下面来看下 NSUserDefault 本地保存的位置,数据持久化之沙盒目录有提及。Library/Preferences 这个目录下的 plist 文件就是其保存的目录。
NSUserDefault 的用法,主要是保存和读取

初始化一个 NSUserDefault

+ (NSUserDefaults *)standardUserDefaults;

设置数据的方法

- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;


- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

读取数据的方法:

- (nullable id)objectForKey:(NSString *)defaultName;


- (nullable NSString *)stringForKey:(NSString *)defaultName;
- (nullable NSArray *)arrayForKey:(NSString *)defaultName;
- (nullable NSDictionary *)dictionaryForKey:(NSString *)defaultName;
- (nullable NSData *)dataForKey:(NSString *)defaultName;
- (nullable NSArray *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (double)doubleForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;
- (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

删除数据的方法:

- (void)removeObjectForKey:(NSString *)defaultName;

保存数据:

/// 如果不手动调用,系统会自动保存,但时间不定
- (BOOL)synchronize;

二、plist实现持久化
由于 NSUserDefault 本质上就是通过 plist 文件来实现属性的持久化。所以,我们可以通过自己创建一个 plist 文件来实现属性的持久化。

      NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
    ;
    
    NSString *docPath = [path objectAtIndex:0];
    
    NSString *myFile = [docPath stringByAppendingPathComponent:@"test.plist"];
    
    NSMutableDictionary *contentDic;
    
    /// 判断本地是否存在 plist 文件
    if ([[NSFileManager defaultManager] fileExistsAtPath:myFile] == NO) {
        
        NSFileManager* fm = [NSFileManager defaultManager];
        
        /// 创建一个文件
        [fm createFileAtPath:myFile contents:nil attributes:nil];
        
        contentDic = [[NSMutableDictionary alloc] init];
        
    }
    else
    {
        contentDic = [[NSMutableDictionary alloc] initWithContentsOfFile:myFile];
    }

    /// 数据的读写操作
    [contentDic setObject:@"1234" forKey:@"passWord"];
    
    /// 将修改都的数据保存到 plist 文件中
    [contentDic writeToFile:myFile atomically:YES];

三、总结
plist文件的读写效率比较高,由于他的读写需要将所有的数据取出再全部保存,所以只适合小数据。

你可能感兴趣的:(iOS数据持久化之属性列表)