Objective c 转换为BOOL和发送消息boolValue之间有什么区别?

Objective c 转换为BOOL和发送消息boolValue之间有什么区别?,objective-c,casting,Objective C,Casting,我认为这两种方法做同样的事情(转换为BOOL)有什么区别: 什么时候应该将其中一个用于另一个?不,它们不一样。区别在于第二个是正确的,第一个不是 在第一行中,您只需将指针转换为BOOL,这大致相当于检查指针是否为nil,并且与实际存储在对象中的值无关 [[dictionary objectForKey:@"boolValue"] boolValue]; 不是强制转换,而是对NSNumber调用一个方法,该方法返回bool。可能涉及到内部强制转换,但实现细节并不公开。它们完全不同 首先从字典中获

我认为这两种方法做同样的事情(转换为
BOOL
)有什么区别:


什么时候应该将其中一个用于另一个?

不,它们不一样。区别在于第二个是正确的,第一个不是

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

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

不是强制转换,而是对NSNumber调用一个方法,该方法返回bool。可能涉及到内部强制转换,但实现细节并不公开。

它们完全不同

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

第二个从字典中获取相同的对象,然后向该对象发送消息
boolValue
。假设,如果对象识别该消息,则将导致对象的
BOOL
版本

[[dictionary objectForKey:@"boolValue"] boolValue];
作为一个具体示例,如果字典包含与键
@“boolValue”
关联的
NSNumber
,则
NSNumber
将接收消息
boolValue
,如果它是非零返回
YES
,否则
NO

所以要回答你的问题,你应该使用第二种形式。将指针投射到
BOOL
几乎没有任何意义