我有一个 iPhone 应用程序,主要针对 3.0,但它利用了可用的新 API。代码是这样的:
if (UIApplicationDidEnterBackgroundNotification != NULL) {
[nc
addObserver: self
selector: @selector(irrelevantCallbackName:)
name: UIApplicationDidEnterBackgroundNotification
object: nil];
}
现在,根据 Apple 所说的一切,如果相关的 API 是弱链接的,那就可以正常工作,因为动态链接器会评估UIApplicationDidEnterBackgroundNotification
to NULL
。但事实并非如此。应用程序可以编译,但一旦运行if (UIApplicationDidEnterBackgroundNotification != NULL)
它崩溃了EXC_BAD_ACCESS
.
这只是我需要设置的编译器标志的问题吗?或者我以错误的方式处理这个问题?
我明白了。对于不是函数的符号 (extern const int foobar
,例如),您必须与符号的地址进行比较,而不是符号本身,因此:
if (&UIApplicationWillEnterForegroundNotification != NULL)
etc;
回想起来,这是显而易见的,但我仍然责怪我周围的整个宇宙从未提及这种区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)