gpt4 book ai didi

ios - 有条件地对编译器隐藏代码

转载 作者:可可西里 更新时间:2023-11-01 03:25:22 27 4
gpt4 key购买 nike

所以问题来了。我准备很快发布 iOS 更新,解决 iOS 7 中的一些问题。为此,我需要使用一些特定的 iOS 7 函数/类型。我已经绝对确定 iOS 7 代码只会在 iOS 7 上执行并回退到 iOS 7 之前的不同代码。当然,我不允许提交当前的 Xcode beta,所以我正在尝试编译使用当前的 Xcode 版本。但是,我似乎找不到禁用此特定警告的方法:

Use of undeclared identifier '<Redacted>'.

有谁知道使用 #pragma 禁用此警告的方法吗? .我尝试了很多不同的方法,包括

-w , -Weverthing , -Wall

但似乎没有任何效果。

更新答:当然不能,因为编译器无法编译它一无所知的标识符。我的解决方案是简单地创建一个 #define :

#define <redacted> 1

更新 2下面的答案实际上使它变得容易得多。我已经创建了一个 #define Xcode5Code(code, alt)这让我可以有条件地执行代码块。通过使用@maddy 的解决方案对其进行修改:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
#define Xcode5Code(code, alt) code
#else
#define Xcode5Code(code, alt) alt
#endif

这使我可以通过使用以下方式轻松地从编译器中隐藏代码块:

Xcode5Code({
//Code to be execute only with Xcode 5
}, {
//code to be executed in previous versions of Xcode
})

使用 #define Xcode5Code 的主要好处是 Xcode 会为您自动完成它,这比使用完整的 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 容易得多, Xcode 不会自动完成。

这实际上不会区分 iOS 7 和 iOS 7 之前的设备。它只区分当前 Xcode 可以处理的 iOS 版本。为了区分我使用的 iOS 设备版本:

NSUInteger DeviceSystemMajorVersion(void) {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue];
});
return _deviceSystemMajorVersion;
}

顺便说一句,上面是Apple的代码。为了稍微绕过 NDA,我会说这有助于布置根 Controller 的 View ,因为这取决于您使用的 Xcode 版本和设备上的 iOS 版本。如果您正在尝试管理测试版代码和生产代码,这会大有帮助。一旦您可以使用 Xcode 5 提交应用程序,#define Xcode5Code将不再需要。

最佳答案

如果您想使用两个不同版本的 Xcode 或两个不同的 Base SDK 设置来编译您的应用程序,那么您应该使用编译器指令:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // iOS 7.0 supported
// iOS 7 code here
#else
// Pre-iOS 7 code here
#endif

不要将其用于运行时检查。此解决方案仅在必须使用两个不同版本编译代码时使用。例如,您已经添加了 iOS 7 代码,但您仍然需要使用 Xcode 4.6 编译代码。使用编译指令允许您使用较旧的 Base SDK 从编译器中“隐藏”iOS 7 代码。

请参阅文档中的“SDK 兼容性指南”以了解有关此和正确运行时检查的更多信息。

关于ios - 有条件地对编译器隐藏代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com