我对Objective - C中的if语句提出了一个简单的问题。
这个if语句是否正确,或者它是多余的,我不需要指定== YES?
NSNumber *boolean = [NSNumber numberWithBool:YES];
if (boolean == YES) ...
感谢
答案 0 :(得分:5)
您比较指针和整数,这不会引导您获得所需的结果。
示例:
NSNumber *boolean1 = [NSNumber numberWithBool:YES];
if (boolean1) {
// true
}
NSNumber *boolean2 = [NSNumber numberWithBool:NO];
if (boolean2) {
// this is also true
}
if ([boolean1 boolValue] && ![boolean2 boolValue]) {
// true
}
答案 1 :(得分:2)
不,它不正确,它不会生成您认为的输出。 NSNumber * boolean
是指向内存中对象的指针,而YES
是标量值;不应将它们与==
进行比较。
如果您输入此代码,您还会收到以下警告:
正确的方法是:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if ( [boolean boolValue] ) {
// do something
}
但是这句话本身没有多大意义,因为你应该比较BOOL
而不是NSNumber
- 没有必要在那里使用NSNumber
。 / p>
答案 2 :(得分:0)
这不起作用。 NSBoolean
的实例是一个对象,无论是或否,都将为非NULL。
有两种方法可以检查NSBoolean
的价值。
第一种是使用boolValue
:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if ([boolean boolValue] == YES) ...
if ([boolean boolValue]) ... // simpler
第二种是使用返回对象的标识:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if (boolean == (id)kCFBooleanTrue) ...
后者更快;它依赖于系统中只有NSBoolean YES
和NSBoolean NO
中的每一个。这些值与kCFBooleanTrue
和kCFBooleanFalse
具有相同的值。我已经读到这是永远安全的,但我不确定它是Apple发布的文档的一部分。