我正在尝试创建一个支持 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;
}
如果支持多任务处理,那么您可以使用那些与多任务处理相关的常量,您应该有弱链接。
测试是否存在您知道与常量相关联的方法可能就足够了。