iPhone,检查常量是否存在

6

如何在运行时检查是否设置了常量?例如,在iOS 4中,UIApplicationDidEnterBackgroundNotification是可用的,但在运行iOS 3时,如果尝试使用它,将会抛出错误。

1个回答

12

你应该看一下这个问题,我认为它也回答了你的问题。if (&UIApplicationWillEnterForegroundNotification != NULL) 应该是动态链接安全的,并告诉你这个常量是否存在。


如果您正在使用LLVM,您需要做一些技巧来防止它优化掉您的if语句。以下是我的解决方法。BOOL backgroundOK = &UIApplicationDidEnterBackgroundNotification != NULL; if (backgroundOK) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification bject:nil]; } - David Beck
这个优化器的错误在LLVM/Clang编译器中已经修复了吗?在哪个版本中修复了? - Nikita Zhuk
这不是LLVM的一个bug,而是一种特性。LLVM会优化掉没有副作用的语句,这是好的。但对于这种类型的代码来说,它使事情变得有点棘手。 - Romain
为什么不使用#ifdef - Iulian Onofrei
@IulianOnofrei 因为UIApplicationWillEnterForegroundNotification不是宏... - Romain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接