关于iOS-NSNumber的if判断

2,270 阅读1分钟

一般的情况,当我们使用一个NSNumber类型做判断的时候,

会简单的使用if(a) 这样的形式

但是这种形式在静态分析的时候会报内存错误

所以我们其实有两种模式:

  1. 当我们已经确定a肯定有值,不是0就是1的时候,可以使用[a boolValue]
  2. 当我们不确定a是否为nil的时候,使用a != nil

详细的代码结果

NSNumber *a = @(0);
NSNumber *b = nil;

if (a) {
    NSLog(@"判断a,结果是YES");
} else {
    NSLog(@"判断a,结果是NO");
}

if (a != nil) {
    NSLog(@"判断 a != nil, 结果是YES");
} else {
    NSLog(@"判断 a != nil, 结果是NO");
}

if ([a boolValue]) {
    NSLog(@"判断[a boolValue], 结果是YES");
} else {
    NSLog(@"判断[a boolValue], 结果是NO");
}

if (b) {
    NSLog(@"判断b,结果是YES");
} else {
    NSLog(@"判断b,结果是NO");
}

if (b != nil) {
    NSLog(@"判断 b != nil, 结果是YES");
} else {
    NSLog(@"判断 b != nil, 结果是NO");
}

if ([b boolValue]) {
    NSLog(@"判断[b boolValue], 结果是YES");
} else {
    NSLog(@"判断[b boolValue], 结果是NO");
}

判断a,结果是YES
判断 a != nil, 结果是YES
判断[a boolValue], 结果是NO
判断b,结果是NO
判断 b != nil, 结果是NO
判断[b boolValue], 结果是NO