Ios 正确检查Objective-C中是否存在C功能
在运行时检查C函数是否存在的正确方法是什么 说明应该使用Ios 正确检查Objective-C中是否存在C功能,ios,c,Ios,C,在运行时检查C函数是否存在的正确方法是什么 说明应该使用if(myweakinkedFunction!=NULL)检查此问题,但说明应该使用if(&UIApplicationOpenSettingsURLString==NULL){ 我当前需要这个用于SecAddSharedWebCredential和UIApplicationOpenSettingsURLString 在部署目标为iOS 7.0的情况下,无论是否添加&,它都不会对第一个函数或第二个函数发出警告 在部署目标为iOS 8.0且两者
if(myweakinkedFunction!=NULL)
检查此问题,但说明应该使用if(&UIApplicationOpenSettingsURLString==NULL){
我当前需要这个用于SecAddSharedWebCredential
和UIApplicationOpenSettingsURLString
在部署目标为iOS 7.0的情况下,无论是否添加&
,它都不会对第一个函数或第二个函数发出警告
在部署目标为iOS 8.0且两者都添加了&
的情况下,UIApplicationOpenSettingsURLString
抛出警告:
“UIApplicationOpenSettingsURLString”的地址与空指针的比较始终为真
从两个功能检查中删除&
,SecAddSharedWebCredential
将抛出警告:
函数“SecAddSharedWebCredential”不等于空指针的比较始终为真
如果从iOS 8.0开始,两个都可用,为什么不都抛出相同的警告?忽略警告,检查这一点的正确方法是什么?只有当部署目标小于8.0时,才需要检查NULL,否则它不是NULL-这就是警告的状态。这两个警告都是在iOS 8.0中添加的,因此如果部署目标是iOS 8.0及更高版本,您无需检查NULL。对于函数,
&
是可选的。对于其他类型,如字典键,则是必需的
这是因为在表达式中使用函数符号会自动转换为指向该函数的指针。请尝试阅读问题的答案
也许一个例子可以说明这一点:
extern int functionA(void);
extern NSString * const valueA;
// ...
printf("%p <- functionA\n", functionA);
printf("%p <- &functionA\n", &functionA);
printf("%p <- valueA\n", valueA);
printf("%p <- &valueA\n", &valueA);
extern-int函数(void);
外部NSString*常量值a;
// ...
printf(“%p”以及检查此项的正确方法是什么?“有或没有&
?“如果两个都在iOS 8.0之后可用,为什么不发出相同的警告?”是的,我现在注意到我将函数与其他类型混合在一起,并认为它们是相同的。
0x1089a8f00 <- functionA
0x1089a8f00 <- &functionA
0x1089a9018 <- valueA
0x1089a9040 <- &valueA