赋值使得指针在没有强制转换的情况下从整数开始

mac*_*osh 3 c iphone cocoa cocoa-touch objective-c

我有一个类似于此的Obj-C方法:

-(void)getUserDefaults:(BOOL *)refreshDefaults
{
    PostAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    if (refreshDefaults) {
        [appDelegate retrieveDefaults];
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样称呼它时,我没有得到任何警告:

[self getUserDefaults:NO];
Run Code Online (Sandbox Code Playgroud)

当我这样打电话时,我收到警告:

[self getUserDefaults:YES];
Run Code Online (Sandbox Code Playgroud)

警告:传递'getUserDefaults:'的参数1使得整数指针没有强制转换

注意:我总是先调用方法传递NO,然后在某个时候传递YES

任何人都可以填写我的问题在这里?谢谢.

Chr*_*son 17

BOOL 是一个原始类型,而不是一个类,所以你的方法声明应该是

-(void)getUserDefaults:(BOOL)refreshDefaults;
Run Code Online (Sandbox Code Playgroud)

代替.你得到警告的原因是0(这是NO定义的)是没有强制转换的有效指针值,相当于NULL,但是1(这YES是定义的)不是有效的指针值没有演员.


And*_*ico 15

getUserDefaults采用BOOL*.传递NO时不会收到警告,因为NO为0且0为NULL,这是合法的BOOL*.YES为1,相同的转换不会自动安全.

你应该使getUserDefaults采用普通的BOOL,而不是指针.


aib*_*aib 5

我之前从未见过Obj-C代码,但我很确定这是因为'refreshDefaults'是指向BOOL的指针,而它应该是BOOL.

我不知道Obj-C中的输入规则,但它看起来像NO定义为0并且编译器没有问题将它转换为指针值(NULL指针.)这不是整数的情况' 1.(另请注意"if(refreshDefaults)"是检查指针refreshDefaults对NULL指针的有效代码)