我相信这两种方法做相同的事情(广播到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几乎没有任何意义。

09-27 08:24