zoukankan      html  css  js  c++  java
  • iOS中NSUserDefaults详解

      NSUserDefault 作为iOS中一种轻量级数据本地化方式,简单易用,经常用于存储一些应用相关属性记录,例如图书app的背景色,进度,上次阅读的书籍及相关配置信息。NSUserDefault实质上是iOS为用户封装好的一个特殊的plist文件,该plist文件存于app沙盒目录下的library/Preferences中,并且以应用的appid命名。有兴趣的可以看一下。

    如下具体用法:

    /*        存储一个数组         */

        NSArray *array1 = @[@"1",@"2",@"3"];

        

        

        /*        该方法仅限于存储系统中不多的数据类型 NSString、NSNumber、NSDictionary、NSArray等         */

        [[NSUserDefaults standardUserDefaults] setValue:array1 forKey:@"testArr"];

        

        /*        取该数组 尽量使用值对应的数据类型来接收值 如果不知道存储值的数据类型  可以使用id类型接收        */

        NSArray *valueArr = [[NSUserDefaults standardUserDefaults] valueForKey:@"testArr"];

        

        

        /*        存储bool值 实质上被系统转化为了NSNumber类型存储         */

        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"IsFirstIn"];

        

        

        /*        !注意 synchronize方法是同步本地文件使用的(实质上,如果不调用该方法,我们上面的操作只是保存在缓存中,并没有真正的写入plist文件,系统会在一定的环境条件下如系统正常退出时同步文件,将数据写入本地plist文件。因此,如果不发送这个消息,如果系统异常退出, 可能会造成数据未保存的情况) 。        */

        [[NSUserDefaults standardUserDefaults] synchronize];

        

        

        /*        移除一条数据         */

        [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"testArr"];

        

        

        /*        清空所有的NSUserDefaults存储的数据 有两种方法         */

        /*        第一种 遍历plist文件中的键值对 一一移除         */

        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

        

        /*        获取所有的数据 包括隐藏的系统部分属性         */

        NSDictionary *dic = [userDefaults dictionaryRepresentation];

        for (id  key in dic) {

            [userDefaults removeObjectForKey:key];

        }

        [userDefaults synchronize];

        

        /*        第二种 直接清空指定plist文件       */

        NSString *boundName = [[NSBundle mainBundle] bundleIdentifier];

        

        

        /*      从用户的默认值中移除指定的持久化域的内容         */

        [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:boundName];

        

        

        /*        同理可以使用set方法添加一个本地plist文件         */

        [[NSUserDefaults standardUserDefaults] setPersistentDomain:@{@"Root":@"testRoot"} forName:@"TestFile"];

        JHLog(@"%@",NSHomeDirectory());

        

        

        /*        通知 在对本地plist文件进行数据操作时 系统提供了一些通知来提醒用户  如在使用setPersistentDomain方法时会post NSUserDefaultsDidChangeNotification 通知 这些功能使用较少 需要的朋友最好看一下官方文档       */

        

        

        

        /*        小技巧提示  在使用NSUserDefaults时函数名较长,可以在pch文件中进行宏定义扩展 简化使用过程 如

         #define JH_AnyDefaults(a) [[NSUserDefaults standardUserDefaults] valueForKey:a]        */

  • 相关阅读:
    宏任务、微任务
    类和模块
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/ToBeTheOne/p/5631061.html
Copyright © 2011-2022 走看看