objective-c – 强制转换为BOOL和发送消息boolValue有什么区别?

我相信这两种方法之间的区别是什么(转换为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很少有任何意义.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...