我相信这两种方法之间的区别是什么(转换为BOOL):
BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"]; BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue];
何时应该使用另一个?
解决方法
他们是完全不同的.
第一个从字典中获取对象指针,然后将指针解释为BOOL.这意味着任何非零指针都将被解释为YES,nil为NO.在具体示例中,由于字典不能包含nil指针,因此您只能从这行代码中获得YES.
第二个从字典中获取相同的对象,然后发送消息boolValueto该对象.据推测,如果对象识别出该消息,那么将导致该对象的BOOL版本.
作为一个具体的例子,如果字典包含与密钥@“boolValue”相关联的NSNumber,则NSNumber将接收消息boolValue,如果它是非零,则返回YES,否则返回NO.
所以要回答你的问题,你应该使用第二种形式.将指针强制转换为BOOL很少有任何意义.