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

发布于 2024-09-11 14:07:40 字数 227 浏览 2 评论 0原文

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

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

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

I am trying to create a universal binary that supports multitasking on the iPhone 4 and can still run on the iPad.

I know how to avoid compile errors for different versions of the iPhone IOS by checking if a class exists by using NSClassFromString and "respondToSelector", but is there a way to check for the existence of constants like UIBackgroundTaskInvalid?

I of course can use #IFDEF, but I want to avoid this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷心人i 2024-09-18 14:07:40

您可以按如下方式进行操作:

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

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

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

You do it as follows:

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

Basically you want to verify that the address of that variable exists.

Update: To be clear, you can't really use an #ifdef for this since you will build with a version of the SDK that contains the symbols.

一片旧的回忆 2024-09-18 14:07:40

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

It's probably sufficient to test for the existence of a method that you know is associated with the constant.

失而复得 2024-09-18 14:07:40

检查多任务 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;
}

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

The preferred method to check for multitasking iOS is to see if UIDevice responds to isMultitaskingSupported, like this:

//----------------------------------------------------------------------
// 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;
}

If multitasking is supported then you can use those multitasking related constants, which you should have weak linked to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文