2

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

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

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

4

3 回答 3

2

你这样做如下:

if (NULL != &UIBackgroundTaskInvalid) {
   //do multitasking stuff here
} else {
   // don't do multitasking stuff here.
}

基本上,您想验证该变量的地址是否存在。

更新:需要明确的是,您不能真正为此使用#ifdef,因为您将使用包含符号的 SDK 版本进行构建。

于 2010-07-29T12:46:23.507 回答
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;
}

如果支持多任务处理,那么您可以使用那些与多任务处理相关的常量,您应该有弱链接。

于 2010-07-29T14:53:08.877 回答
1

测试是否存在您知道与常量相关联的方法可能就足够了。

于 2010-07-29T13:02:47.090 回答