我正在尝试创建一个支持iPhone 4多任务处理的通用二进制文件,并且仍然可以在iPad上运行。
我知道如何通过使用NSClassFromString和“respondToSelector”检查类是否存在来避免不同版本的iPhone IOS的编译错误,但是有没有办法检查是否存在像UIBackgroundTaskInvalid这样的常量?
我当然可以使用#IFDEF,但我想避免这种情况。
答案 0 :(得分:2)
你这样做:
if (NULL != &UIBackgroundTaskInvalid) {
//do multitasking stuff here
} else {
// don't do multitasking stuff here.
}
基本上你想验证该变量的地址是否存在。
更新:为了清楚起见,您无法真正使用#ifdef,因为您将使用包含符号的SDK版本进行构建。
答案 1 :(得分:1)
测试是否存在与常量相关联的方法可能就足够了。
答案 2 :(得分:1)
检查多任务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;
}
如果支持多任务处理,那么你可以使用那些多任务相关的常量,你应该将它们弱连接到。