首页 > 代码库 > iOS 8:NSNull在NSUerDefaults判空处理中无效

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;}

技术分享 

 

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