Pet*_*rbo 6 casting objective-c
我认为这两种方法有什么区别做同样的事情(强制转换为a BOOL
):
BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"];
BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue];
Run Code Online (Sandbox Code Playgroud)
何时应该使用另一个?
他们是完全不同的.
第一个从字典中获取一个对象指针,然后将指针解释为BOOL
.这意味着,任何非nil
指针将被解释为YES
,和nil
作为NO
.在具体示例中,由于字典不能包含nil
指针,因此您只能YES
从这行代码中获取.
第二个从字典中获取相同的对象,然后将消息发送boolValue
到该对象.据推测,如果对象识别出该消息,那么将导致BOOL
该对象的版本.
作为具体示例,如果字典包含NSNumber
与密钥相关联的字典@"boolValue"
,NSNumber
则将接收消息,否则boolValue
返回非零.YES
NO
所以要回答你的问题,你应该使用第二种形式.将指针强制转换为BOOL
很少有意义.
归档时间: |
|
查看次数: |
148 次 |
最近记录: |