在 iOS SDK 内部,可以找到许多由 Apple 定义的常量,如下所示:
extern const CFStringRef kSomeReallyNiceConstant
__OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_8_0);
如果我检查这种恒定标准方式的存在:
if (NULL == &kSomeReallyNiceConstant)
我几乎引用了它,为了让我的代码正确编译,在这种情况下,我至少需要 iOS SDK 8.0 或更高版本。
当涉及到对象和方法时,反射方法可以很好地与NSClassFromString
,respondsToSelector
和一起使用performSelector
。
是否有机会使用某种反射(按名称访问字符串常量)来尝试获取它的值(如果它存在(或者如果不存在则没有)?
我知道我可以使用宏来检查 iOS 版本并根据该信息执行不同的代码路径,但我不想使用这种方法。
我设法用指针做到了这一点:
#include <dlfcn.h>
// ...
int *pointer = dlsym(RTLD_SELF, "kSomeReallyNiceConstant");
if (pointer) {
NSLog(@"Thing exists!");
} else {
NSLog(@"Nope, doesn't exist!");
}
但我不确定这是否会导致应用程序被拒绝。你可能知道吗?
不管这种指针方法如何,我都很想知道是否还有其他方法可以实现这一目标?
没有什么比在此主题上找到的建议解决方案更好的了。
#include <dlfcn.h>
// ...
int *pointer = dlsym(RTLD_SELF, "kSomeReallyNiceConstant");
if (pointer) {
NSLog(@"Thing exists!");
} else {
NSLog(@"Nope, doesn't exist!");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句