iOS 8:NSNull在NSUerDefaults判空处理中无效

关键字:NSUserDefaults  NSNull  Nil

  最近在某份代码中看到如下写法:

1 NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
2     
3 NSString *count = [user objectForKey:@"count"];
4 NSString *pass = [user objectForKey:@"pass"];
5 
6 if((NSNull*)count == [NSNull null])//判空,当count是null的时候,就会进if,防崩,因为如果是空,还要用,就可能会崩
7 {
8    return;
9 }

  经实验,并未得出代码注释中的结果。首次运行此代码,则count、pass都为nil。(NSNull *)count转换后,还是nil,再与[NSNull null]做==运算,结果为false,达不到防御编程目的。调试代码及结果如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSString *hello = [[NSUserDefaults standardUserDefaults] valueForKey:@"hello"];
    if((NSNull*)hello == [NSNull null])//判空,当count是null的时候,就会进if,防崩,因为如果是空,还要用,就可能会崩
    {
        return YES;
    }
    
    return YES;
}

技术分享 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。