为BOOL指针赋值时出现奇怪的警告问题

时间:2013-01-24 08:07:12

标签: ios objective-c boolean

我正在开发iOS6并使用Xcode 4.5.2。

我有一个UIViewController,让我们说它的名字是aViewController。在这个UIViewController中,我使用此代码将 BOOL指针声明为属性。实际上,它不是我实现的一段代码,所以我真的不知道为什么使用 BOOL指针

现在,在为此 BOOL指针分配值时,我得到了这个着名的警告Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'signed char',这完全可以理解,因为在我的情况下, BOOL 指向布尔变量。

要解决此问题,我已尝试this one。所以我的代码是这样的:

aViewController.aBoolPointer = YES;

然后,我试过了,

aViewController.(*aBoolPointer) = YES;

由于Objective-c是C的超集,我记得在C .*符号中等于->。以上表示法给出了错误。错误描述:预期标识符

如果我改变代码是这样的:

aViewController->aBoolPointer = YES ;

我收到此错误实例变量aBoolPointer受保护

如果我使用此代码

,这是一个奇怪的问题
aViewController.aBoolPointer = NO ;

然后,我没有得到任何警告。

所以我的问题是:

1 - 为 BOOL指针分配 NO 值时,为什么没有警告?

2 - 如何正确地将 YES 值分配给 BOOL指针

3 - 考虑到我解释的步骤, YES NO 之间有什么区别?

谢谢大家。

2 个答案:

答案 0 :(得分:3)

  

1为什么在为BOOL指针指定NO值时没有警告?

因为NO0NULL相同,所以就像在指针中指定NULL一样,如下所示:

BOOL *p = NULL;
  

2如何为BOOL指针正确分配YES值?

如果属性定义为:

@property(assign, nonatomic) BOOL *boolp;

然后:

BOOL b = YES;
obj.boolp = &b;
  

3通过考虑我解释的步骤,YES或NO之间有什么区别?

我不明白这个问题。

答案 1 :(得分:0)

BOOL指针就像其他人一样指针

if (aViewController.aBoolPointer != NULL)
    *(aViewController.aBoolPointer) = YES;

但是,我不知道为什么属性会将BOOL指针用作类型。您使用的是第三方框架吗?您最好查看他们的文档或询问作者。