2011-12-02 24 views

回答

6

他们是完全不同的。

第一个从字典中获取对象指针,然后将指针解释为BOOL。这意味着任何非指针将被解释为YES,而nil将被解释为NO。在具体的例子中,由于字典不能包含nil指针,所以你只能从这行代码中获得YES

第二个从字典中获取相同的对象,然后将消息boolValue发送到该对象。据推测,如果对象识别该消息,那将导致该对象的版本为BOOL

作为具体的例子,如果字典包含与键@"boolValue"相关联的NSNumber,所述NSNumber将接收该消息boolValue,并且如果它是非零返回YES,否则NO

所以要回答你的问题,你应该使用第二种形式。投射指向BOOL的指针很少有意义。

6

不,它们不一样。不同之处在于第二个是正确的,第一个不是。

在第一行中,您只需将指针强制转换为BOOL,这大致相当于检查指针是否为零,并且与实际存储在对象中的值无关。

3
[[dictionary objectForKey:@"boolValue"] boolValue]; 

不是一个强制转换,而是在NSNumber上调用一个返回一个bool的方法。演员阵容可能涉及 - 但实施细节不公开。

相关问题