美文网首页
NSUserDefaults

NSUserDefaults

作者: hello_kitty | 来源:发表于2016-11-10 12:08 被阅读0次

    NSUserDefaults是将数据保存在一个plist格式的文件中. 此plist文件路径为APP沙盒文件夹下/Library/Preferences/中

    说明 :
    NSUserDefaults可以存放的数据类型有 :
    基本类型(float, double, intgeter等), NSString, NSArray, NSDictionary, NSData, NSNumber, BOOL, NSURL类型. 存取数据一般都是对持久域进行的数据操作(默认).

    注意 :
    1、在对NSUserDefaults进行取数据时,它的返回值是不可变的. 即使向NSUserDefaults中存放一个可变类型的对象时, 取出时会返回一个不可变对象
    2、在向NSUserDefaults中存放数据时, 不要存放NSNull类型的数据, 否则会crash,所以当你向NSUserDefaults中存放数据之前最好判断你所存放的数据是否是NSNull类型的数据, 如果是可以将给类型数据转化为nil或者其他形式.

    1、获取NSUserDefaults对象(系统中提供的单例)
    + (NSUserDefaults )standardUserDefaults/*
    2、存取数据 .
    - setObject:forKey:
    - setInteger:forKey:
    3、 立即同步 .
    - (BOOL)synchronize
    4、同步更改之后, 将UserDefaults对象从内存中删除, 之后随即调用standardUserDefaults, 再次获取userDefault对象
    + (void)resetStandardUserDefaults
    5、 应用程序之间共享数据(当开发应用程序套件时)
    - (instancetype)initWithSuiteName:(NSString )suitename
    存取数据
    - (void)addData
    {
    /
    * 返回(找到)单例 */
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

        /** 保存各种类型数据 */
        [userDefaults setObject:@"张三"forKey:@"name"];
        [userDefaults setInteger:21forKey:@"age"];
        [userDefaults setFloat:99.3forKey:@"score"];
        [userDefaults setDouble:170.66forKey:@"height"];
        [userDefaults setURL:[NSURL URLWithString:@"1944154449@qq.com"] forKey:@"email"];
        NSArray *array = @[@"数学", @"语文", @"英语"];
        [userDefaults setObject:array forKey:@"subject"];
        NSDictionary *dic = @{@"父亲": @"张毅", @"母亲": @"刘岩"};
        [userDefaults setObject:dic forKey:@"family"];/**
                                                       
        *系统也会周期性的调用此方法来为我们将数据存储到磁盘, 当你不想等待系统自动调用的话(比如app将要退出时, 或者你要立即更新数据时), 可以直接调用此方法.*/
        [userDefaults synchronize];
        
        /** 返回对应域中的所有键值对 */
        NSLog(@"%@", [userDefaults dictionaryRepresentation]);
    }
    

    添加持久域:
    1)、创建持久域会在 Library文件夹下的Perferences文件夹下生成plist文件, 且将存储的数据存放在磁盘中.
    2)、持久域 : 其实持久域无非就是他的生命周期和app的生命周期相同, 只要你不卸载app的话, 持久域就会存在, 卸载app, 持久域才会随之消失.
    - (void)createPersistentDomain
    {
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

              /** 创建字典, 用来存放用户的爱好 *
              /NSDictionary *dic = @{@"ball": @"football", @"book": @"将夜"};
    
              /** 添加持久域 */
              [user setPersistentDomain:dic forName:@"hobby"];
    
              /** 取出持久域 */
              NSDictionary *dic1 = [user persistentDomainForName:@"hobby"];
              NSLog(@"%@", dic1);
    
              /** 删除持久域 */
            [user removePersistentDomainForName:@"hobby"];
    
         }
    

    创建添加不稳定域
    1)、不会生成plist文件, 且将数据存放在静态区
    2)、不稳定域 : 在你不退出程序时, 是可以取出不稳定域的. 但当你退出程序再进入程序时上次创建的不稳定域将不存在了;这就是持久域与不稳定域的区别.

        NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    
         /** 创建一个字典 */
        NSDictionary *volatileDic = @{@"name": @"zhangsan", @"age": @"17"};
    
        /** 添加不稳定域 */
       [user setVolatileDomain:volatileDic forName:@"violatile"];
    
        /** 取出不稳定域 */
        NSLog(@"第一页violatile: %@", [user volatileDomainForName:@"violatile"]);
    
        /** 删除不稳定域 */
        [user removeVolatileDomainForName:@"violatile"];
    

    套件的创建及添加
    套件的作用: 一个应用程序是不能访问或修改其他应用程序的偏好的.
    当你在当前应用程序访问其他应用程序时, 系统读取数据的文件并不是被访问的应用程序的文件, 而是这个套件中的数据.套件就是在开发应用程序扩展时,在扩展和包含应用程序之间共享偏好或其他数据的.

        /** 创建一个套件在Library目录下的Perferences文件夹下 */
        NSUserDefaults *suite = [[NSUserDefaults alloc] initWithSuiteName:@"nihao"];
    
        /** 同理可以利用这个方法来添加套件 */
        - (void)addSuiteNamed:(NSString *)suiteName
    
        /** 利用该方法删除套件 */
        - (void)removeSuiteNamed:(NSString *)suiteName
    

    注册域
    注册域: 注册域的数据不会直接写入磁盘中.
    - (void)registerDomain
    {
    NSUserDefaultsuser = [NSUserDefaultsstandardUserDefaults];
    NSDictionary
    dic = @{@"name": @"张三"};
    [user registerDefaults:dic];
    }

    参考文献:http://blog.csdn.net/sponge_cmz/article/details/49798931#1-nsuserdefaults保存数据的的存放位置及文件格式

    相关文章

      网友评论

          本文标题:NSUserDefaults

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