gpt4 book ai didi

ios - 正确检查 Objective-C 中是否存在 C 函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:13 25 4
gpt4 key购买 nike

在运行时检查 C 函数是否存在的正确方法是什么?

This documentation page说你应该使用 if (MyWeakLinkedFunction != NULL) 检查这个,但是 this sample code说你应该使用 if (&UIApplicationOpenSettingsURLString == NULL) {

我目前需要这个用于 SecAddSharedWebCredentialUIApplicationOpenSettingsURLString

对于 iOS 7.0 的部署目标,它不会对第一个函数和第二个函数发出警告,无论我是否添加 &

部署目标为 iOS 8.0 并为两者添加了 &UIApplicationOpenSettingsURLString 抛出警告:

Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true

从两个函数检查中删除 &SecAddSharedWebCredential 抛出警告:

Comparison of function 'SecAddSharedWebCredential' not equal to a null pointer is always true

如果自 iOS 8.0 起两者都可用,为什么不同时抛出相同的警告?忽略警告的正确检查方法是什么?

最佳答案

对于函数,& 是可选的。对于其他类型,例如字典键,这是必需的。

这是因为在表达式中使用函数符号会自动转换为指向函数的指针。尝试阅读问题的答案 Function pointers and address of a function .

也许一个例子可以说明这一点:

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);

将输出类似于:

0x1089a8f00 <-  functionA
0x1089a8f00 <- &functionA
0x1089a9018 <- valueA
0x1089a9040 <- &valueA

如果 valueA 在运行时不可用,第三行将崩溃。

关于ios - 正确检查 Objective-C 中是否存在 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com