NSUserDefaults之registerDefaults

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSString *stringValue = [userDefaults objectForKey:@"Key"];

        NSLog(@"stringValue = %@",stringValue);

    在这里stringValue的值为nil,一般地我们都是通过 isEqualToString来判断当前的值是否满足条件,也可以更严格的判断是否为nil来确定@"Key"是否注册.

    BOOL boolValue = [userDefaults objectForKey:@"Key"];

    NSLog(@"boolValue = %i",boolValue);

    在bool下当没有注册@"Key"时得到的为NO,这样是有风险的.所以当判断value前还需要判断key的registerDefault.

    - (void)registerDefaults:(NSDictionary<NSString *, id> *)registrationDictionary;

    API给到的注释为

    /*!

     -registerDefaults: adds the registrationDictionary to the last item in every search list. This means that after NSUserDefaults has looked for a value in every other valid location, it will look in registered defaults, making them useful as a "fallback" value. Registered defaults are never stored between runs of an application, and are visible only to the application that registers them.

     

     Default values from Defaults Configuration Files will automatically be registered.

     */

    从上面的解释可以知道使用该方法时,会在UserDefault中查找已经注册的Key,如果存在当前的Key则返回不再注册.

    下面举一个例子:在didFinishLaunchingWithOptions中

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

    [userDefaults registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:@"register",@"Test", nil]];

    NSLog(@"userID = %@",[userDefaults objectForKey:@"Test"]);

    在VC的viewDidLoad中

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

    [user setBool:YES forKey:@"Test"];

    1.第一次运行demo时会得到 userID = "register".

    2.第二次运行demo时会得到 userID = 1.

    这说明在第二次执行demo时候,registerDefaults:方法并没有修改 a "fallback" value.

提高技能如同提升自信心。
原文地址:https://www.cnblogs.com/chims-liu-touch/p/9121587.html