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