变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2016-01-20 | Alfred Jiang | - |
方案名称
语法 - Objective-C 中 BOOL 类成员变量的判断陷阱
关键字
语法 \ Objective-C \ BOOL \ 成员变量 \ 判断
需求场景
- 对某对象的 BOOL 类成员变量做肯定判断时,可能出现的判断错误
参考链接
(无)
详细内容
当自定义的类中包含 BOOL 类公共成员变量时,若该类的对象为空,
对该对象 BOOL 类成员变量做肯定判断时,无论逻辑上 BOOL 类成员变量是否为 YES,都会判断为 NO。
TestObject *tObject0 = nil;
tObject0.isEmpty = YES;
if (tObject0.isEmpty) {
NSLog(@"tObject0 is Empty");
}
else
{
NSLog(@"tObject0 is not Empty");
}
TestObject *tObject1 = nil;
tObject1.isEmpty = NO;
if (tObject1.isEmpty) {
NSLog(@"!tObject1 is Empty");
}
else
{
NSLog(@"tObject1 is not Empty");
}
输出:
2016-01-20 12:53:04.527 TestEmpty[11315:335458] tObject0 is not Empty
2016-01-20 12:53:04.528 TestEmpty[11315:335458] tObject0 is not Empty
对该对象 BOOL 类成员变量做否定判断时,无论逻辑上 BOOL 类成员变量是否为 NO,都会判断为 YES。
TestObject *tObject0 = nil;
tObject0.isEmpty = YES;
if (!tObject0.isEmpty) {
NSLog(@"tObject0 is Empty");
}
else
{
NSLog(@"tObject0 is not Empty");
}
TestObject *tObject1 = nil;
tObject1.isEmpty = NO;
if (!tObject1.isEmpty) {
NSLog(@"!tObject1 is Empty");
}
else
{
NSLog(@"tObject1 is not Empty");
}
输出:
2016-01-20 12:54:48.837 TestEmpty[11330:337224] tObject0 is Empty
2016-01-20 12:54:48.838 TestEmpty[11330:337224] !tObject0 is Empty
所以在针对此类成员变量判断时,一定要优先判断对象是否为空,只有在对象非空的条件下,判断 BOOL 类成员变量才有效。
效果图
(无)
备注
(无)