如何在创建iPhone通用二进制文件时测试常量的存在

时间:2010-07-29 12:43:57

标签: iphone binary universal

我正在尝试创建一个支持iPhone 4多任务处理的通用二进制文件,并且仍然可以在iPad上运行。

我知道如何通过使用NSClassFromString和“respondToSelector”检查类是否存在来避免不同版本的iPhone IOS的​​编译错误,但是有没有办法检查是否存在像UIBackgroundTaskInvalid这样的常量?

我当然可以使用#IFDEF,但我想避免这种情况。

3 个答案:

答案 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;
}

如果支持多任务处理,那么你可以使用那些多任务相关的常量,你应该将它们弱连接到。