我有一个类似于此的Obj-C方法:
-(void)getUserDefaults:(BOOL *)refreshDefaults { PostAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; if (refreshDefaults) { [appDelegate retrieveDefaults]; } }
当我这样称呼它时,我没有得到任何警告:
[self getUserDefaults:NO];
当我这样打电话时,我收到警告:
[self getUserDefaults:YES];
警告:传递'getUserDefaults:'的参数1使得整数指针没有强制转换
注意:我总是先调用方法传递NO,然后在某个时候传递YES
任何人都可以填写我的问题在这里?谢谢.
BOOL
是一个原始类型,而不是一个类,所以你的方法声明应该是
-(void)getUserDefaults:(BOOL)refreshDefaults;
代替.你得到警告的原因是0
(这是NO
定义的)是没有强制转换的有效指针值,相当于NULL
,但是1
(这YES
是定义的)不是有效的指针值没有演员.
getUserDefaults采用BOOL*.传递NO时不会收到警告,因为NO为0且0为NULL,这是合法的BOOL*.YES为1,相同的转换不会自动安全.
你应该使getUserDefaults采用普通的BOOL,而不是指针.
我之前从未见过Obj-C代码,但我很确定这是因为'refreshDefaults'是指向BOOL的指针,而它应该是BOOL.
我不知道Obj-C中的输入规则,但它看起来像NO定义为0并且编译器没有问题将它转换为指针值(NULL指针.)这不是整数的情况' 1.(另请注意"if(refreshDefaults)"是检查指针refreshDefaults对NULL指针的有效代码)