的是这两种方法,我认为做同样的事情(转换为BOOL
)之间的区别:强制转换为BOOL并发送消息boolValue有什么区别?
BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"];
BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue];
当要么使用比其他?
的是这两种方法,我认为做同样的事情(转换为BOOL
)之间的区别:强制转换为BOOL并发送消息boolValue有什么区别?
BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"];
BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue];
当要么使用比其他?
他们是完全不同的。
第一个从字典中获取对象指针,然后将指针解释为BOOL
。这意味着任何非指针将被解释为YES
,而nil
将被解释为NO
。在具体的例子中,由于字典不能包含nil
指针,所以你只能从这行代码中获得YES
。
第二个从字典中获取相同的对象,然后将消息boolValue
发送到该对象。据推测,如果对象识别该消息,那将导致该对象的版本为BOOL
。
作为具体的例子,如果字典包含与键@"boolValue"
相关联的NSNumber
,所述NSNumber
将接收该消息boolValue
,并且如果它是非零返回YES
,否则NO
。
所以要回答你的问题,你应该使用第二种形式。投射指向BOOL
的指针很少有意义。
不,它们不一样。不同之处在于第二个是正确的,第一个不是。
在第一行中,您只需将指针强制转换为BOOL,这大致相当于检查指针是否为零,并且与实际存储在对象中的值无关。
[[dictionary objectForKey:@"boolValue"] boolValue];
不是一个强制转换,而是在NSNumber上调用一个返回一个bool的方法。演员阵容可能涉及 - 但实施细节不公开。