一般的情况,当我们使用一个NSNumber类型做判断的时候,
会简单的使用if(a) 这样的形式
但是这种形式在静态分析的时候会报内存错误
所以我们其实有两种模式:
- 当我们已经确定a肯定有值,不是0就是1的时候,可以使用
[a boolValue] - 当我们不确定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