我正在使用如下条件代码,
我只想在 ios5.0 和 > ios5.0 中运行某些代码(我的意思是我也想支持 ios5.0 和 5.1 版本)
但以下条件似乎不起作用。(目前我的开发版本是 5.1,但下面的代码片段没有被识别。控件没有进入它。)
请让我知道你的想法
#ifdef __IPHONE_5_0_OR_LATER
我正在使用如下条件代码,
我只想在 ios5.0 和 > ios5.0 中运行某些代码(我的意思是我也想支持 ios5.0 和 5.1 版本)
但以下条件似乎不起作用。(目前我的开发版本是 5.1,但下面的代码片段没有被识别。控件没有进入它。)
请让我知道你的想法
#ifdef __IPHONE_5_0_OR_LATER
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
// iPhone 5.0 code here
#endif
#define __IPHONE_2_0 20000
#define __IPHONE_2_1 20100
#define __IPHONE_2_2 20200
#define __IPHONE_3_0 30000
#define __IPHONE_3_1 30100
#define __IPHONE_3_2 30200
#define __IPHONE_4_0 40000
#define __IPHONE_4_1 40100
#define __IPHONE_4_2 40200
#define __IPHONE_4_3 40300
#define __IPHONE_5_0 50000
#define __IPHONE_5_1 50100
#define __IPHONE_NA 99999 /* not available */
#ifdef
是一个编译指令,因此它将在编译时而不是运行时进行评估。
因此,如果您将其添加到您的代码中,如果您的目标 SDK 与您的#ifdef
. 因此,如果您为 iOS 4 和 5 编译一个应用程序并将所有 5 个唯一方法放在#ifdef io5
应用程序中,那么在 iOS 4 上将崩溃,因为这些方法将被调用。
如果您想检查某些方法是否可用,那么您应该这样做:
这是一个从其父级解除模态视图控制器的示例。由于在 iOS 5parentViewController
中更改为,我们检查是否可用并使用它。presentingViewController
presentingViewController
if ([self respondsToSelector:@selector(presentingViewController)]) {
[self.presentingViewController dismissModalViewControllerAnimated:YES];
} else {
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
检查类是否可用也是如此:
if ([MPNowPlayingInfoCenter class]) {
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSDictionary *songInfo = /* ... snip ... */;
center.nowPlayingInfo = songInfo;
}
NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ( 5 == [[versionCompatibility objectAtIndex:0] intValue] ) { /// iOS5 is installed
// Put iOS-5 code here
} else { /// iOS4 is installed
// Put iOS-4 code here
}