【发布时间】:2010-07-29 22:53:08
【问题描述】:
我正在尝试创建一个通用二进制文件,它支持 iPhone 4 上的多任务处理,并且仍然可以在 iPad 上运行。
我知道如何通过使用 NSClassFromString 和“respondToSelector”检查类是否存在来避免不同版本的 iPhone IOS 的编译错误,但是有没有办法检查 UIBackgroundTaskInvalid 等常量是否存在?
我当然可以使用#IFDEF,但我想避免这种情况。
【问题讨论】:
我正在尝试创建一个通用二进制文件,它支持 iPhone 4 上的多任务处理,并且仍然可以在 iPad 上运行。
我知道如何通过使用 NSClassFromString 和“respondToSelector”检查类是否存在来避免不同版本的 iPhone IOS 的编译错误,但是有没有办法检查 UIBackgroundTaskInvalid 等常量是否存在?
我当然可以使用#IFDEF,但我想避免这种情况。
【问题讨论】:
你这样做:
if (NULL != &UIBackgroundTaskInvalid) {
//do multitasking stuff here
} else {
// don't do multitasking stuff here.
}
基本上你想验证那个变量的地址是否存在。
更新:需要明确的是,您不能真正为此使用#ifdef,因为您将使用包含符号的 SDK 版本进行构建。
【讨论】:
测试是否存在您知道与常量相关联的方法可能就足够了。
【讨论】:
检查多任务 iOS 的首选方法是查看 UIDevice 是否响应 isMultitaskingSupported,如下所示:
//----------------------------------------------------------------------
// returns YES if multitasking is available (iOS 4.0 or >)
//----------------------------------------------------------------------
BOOL hasMultitasking()
{
UIDevice* device = [UIDevice currentDevice];
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
return [device isMultitaskingSupported];
}
return NO;
}
如果支持多任务,那么您可以使用那些与多任务相关的常量,您应该与这些常量进行弱链接。
【讨论】: