我相信这两种方法做相同的事情(广播到BOOL
)有什么区别:
BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"];
BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue];
什么时候应该在另一个上使用?
最佳答案
他们是完全不同的。
第一个从字典中获取对象指针,然后将指针解释为BOOL
。这意味着任何非nil
指针将被解释为YES
,而nil
将被解释为NO
。在具体的示例中,由于字典不能包含nil
指针,因此您只会从该行代码中获得YES
。
第二个从字典中获取相同的对象,然后将boolValue
消息发送到该对象。据推测,如果对象识别出该消息,则将导致该对象的BOOL
版本。
举一个具体的例子,如果字典中包含与键NSNumber
关联的@"boolValue"
,则NSNumber
将接收消息boolValue
,如果它不是零,则返回YES
,否则返回NO
。
因此,要回答您的问题,您应该使用第二种形式。将指针转换为BOOL
几乎没有任何意义。