Ios 为布尔指针赋值时出现奇怪的警告问题

Ios 为布尔指针赋值时出现奇怪的警告问题,ios,objective-c,boolean,Ios,Objective C,Boolean,我正在iOS6中开发一个应用程序,并使用Xcode 4.5.2 我有一个UIViewController,假设它的名字是aViewController。在这个UIViewController中,我使用此代码将一个BOOL指针声明为一个属性。实际上,这不是我实现的一段代码,所以我真的不知道为什么要使用BOOL-pointer 现在,当给这个BOOL指针赋值时,我从'signed char'中得到了一个著名的警告不兼容的整数到指针转换,它将赋值给'BOOL*'(也称为'signed char*),这

我正在iOS6中开发一个应用程序,并使用Xcode 4.5.2

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

现在,当给这个BOOL指针赋值时,我从'signed char'中得到了一个著名的警告
不兼容的整数到指针转换,它将赋值给'BOOL*'(也称为'signed char*),这是完全可以理解的,因为在我的例子中,BOOL指向一个布尔变量

为了解决这个问题,我尝试过。所以我的代码如下:

aViewController.aBoolPointer = YES;
然后,我试过

aViewController.(*aBoolPointer) = YES;
由于Objective-c是c的超集,我记得在c
*
中,符号等于
->
。上面的符号给出了一个错误。错误描述:需要标识符

如果我将代码更改为如下所示:

aViewController->aBoolPointer = YES ;
我发现这个错误实例变量aBoolPointer受保护

这是一个奇怪的问题,如果我使用这个代码

aViewController.aBoolPointer = NO ;
然后,我没有得到任何警告

因此,我的问题是:

1-为什么我在为布尔指针指定no值时没有收到警告

2-如何将YES值正确分配给布尔指针

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

谢谢大家

1为什么我没有给布尔指针赋值时没有收到警告

因为
NO
0
NULL
相同,所以这就像将
NULL
分配给指针一样,如下所示:

BOOL *p = NULL;
2如何正确地将YES值指定给布尔指针

如果属性定义为:

@property(assign, nonatomic) BOOL *boolp;
然后:

3考虑到我解释的步骤,是或否之间有什么区别

我不明白这个问题

1为什么我没有给布尔指针赋值时没有收到警告

因为
NO
0
NULL
相同,所以这就像将
NULL
分配给指针一样,如下所示:

BOOL *p = NULL;
2如何正确地将YES值指定给布尔指针

如果属性定义为:

@property(assign, nonatomic) BOOL *boolp;
然后:

3考虑到我解释的步骤,是或否之间有什么区别


我不明白这个问题。

布尔指针就像其他指针一样

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

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

布尔指针和其他指针一样是指针

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


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

为什么要
BOOL*
?我打赌你只是想要一个
BOOL
属性。你会感到困惑,因为Obj-C中的所有对象都是指针,并且你假设基本属性也需要是指针。我已经在问题中解释过我没有写这段代码,我已经知道使用BOOL通常是无用的,而且,如果你看到我附加的这个问题链接,已经解释过使用BOOL是没有必要的。但是,这是我面临的一个非常奇怪的问题。这就是为什么我要问为什么会发生这种情况。选民们:你们有什么理由吗!!!!!如果你有,欢迎评论。为什么你想要一个
BOOL*
?我打赌你只是想要一个
BOOL
属性。你会感到困惑,因为Obj-C中的所有对象都是指针,并且你假设基本属性也需要是指针。我已经在问题中解释过我没有写这段代码,我已经知道使用BOOL通常是无用的,而且,如果你看到我附加的这个问题链接,已经解释过使用BOOL是没有必要的。但是,这是我面临的一个非常奇怪的问题。这就是为什么我要问为什么会发生这种情况。选民们:你们有什么理由吗!!!!!如果有,欢迎评论。这取决于
b
的声明位置。它可以在任何地方使用相同的机制。使用
BOOL*
是毫无意义的,而且很少使用,所以这并不重要。需要尽快删除。现在一切都清楚了,第三个问题在第一个答案中解释。谢谢。这取决于
b
的声明位置。它可以在任何地方使用相同的机制。使用
BOOL*
是毫无意义的,而且很少使用,所以这并不重要。它需要尽快删除。现在一切都清楚了,第三个问题在第一个答案中解释。谢谢。那真的不起作用;这意味着
aBoolPointer
必须通过执行类似
aBoolPointer=malloc(sizeof(BOOL))
之类的操作来初始化。该对象可能已经为您malloc了内存(它应该这样做)。你真的需要检查文档或询问作者。我没有初始化一个olpointer对象可能会为你初始化它,所以你不必这样做。阅读源代码以找出答案。
BOOL*
(或
int*
)中没有值,因为管理它很困难,而且指针+分配的内存>原语的大小!那真的不管用;这意味着
aBoolPointer
必须通过执行类似
aBoolPointer=malloc(sizeof(BOOL))
之类的操作来初始化。该对象可能已经为您malloc了内存(它应该这样做)。你真的需要检查文档或询问作者。我没有初始化一个olpointer对象可能会为你初始化它,所以你不必这样做。阅读源代码以找出答案。a
BOOL*