忽略xcode 5编译中的ios8代码

忽略xcode 5编译中的ios8代码,xcode,conditional-compilation,Xcode,Conditional Compilation,我有一个团队在做一些IOS代码。一位开发人员(me)使用Xcode6测试版编写了几行特定于IOS8的代码。当另一个使用Xcode5的开发人员为IOS7构建它时,编译失败,因为他不存在IOS8 SDK if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){ // ios8 code } else { // ios7 and less way } 有没有办法在基于SDK或Xcode版本的Xcode编

我有一个团队在做一些IOS代码。一位开发人员(me)使用Xcode6测试版编写了几行特定于IOS8的代码。当另一个使用Xcode5的开发人员为IOS7构建它时,编译失败,因为他不存在IOS8 SDK

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
    // ios8 code
} else {
    // ios7 and less way
}

有没有办法在基于SDK或Xcode版本的Xcode编译中忽略IOS8代码,这样它就可以编译了

是的,您可以使用指令执行此操作:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000
    // target is lower than iOS 8.0
    #else
    // target is at least iOS 8.0
    #endif
#endif
#需要ifdef(IPHONE)操作系统(OS)版本(MIN)
//目标是iOS
#如果IPHONE操作系统版本最低要求<80000
//目标低于iOS 8.0
#否则
//目标至少为iOS 8.0
#恩迪夫
#恩迪夫
这类似于注释掉不需要的代码行,但会自动进行注释。编译器不包括存储在if语句8.0特定部分的所有内容。

这很好。但简而言之,询问对象某个方法是否响应选择器:

if ([self.<object_name> respondsToSelector:@selector(<method_in_question>)]) {
    [self.<object_name> <method_in_question>];
}
if([self.respondsToSelector:@selector()])){
[自我];
}

这比检查实际操作系统版本更具动态性。祝你好运

这是运行时解决方案,我的解决方案在编译时工作。如果没有对该方法的支持,100%,为什么我们要在运行时检查它并浪费资源?1)我无法在我有2)我不喜欢处理低级代码的时间内让您的工作。3) 1次检查,或2次或3次检查,不会减慢应用程序的运行速度,也不会浪费足够的资源,这更容易。我同意你的观点,但如果你多次检查,可能会降低性能。我考虑了询问者提到的那个特殊情况,我的想法是,在生产版本中,他们不需要任何版本相关的代码。所以我选择了低层次的解决方案。但是您的解决方案更多的是支持多版本。的确,如果执行多次,检查可能会降低性能。在我的特殊情况下,不会是这样。这是解决方案的另一个缺点:它需要版本维护。虽然它在编译时可能更有效,但它需要额外的程序员开销,这可能不如更快的编译时更可取,并且可能在运行时节省一些检查。下次,如果你知道这两种解决方案,我会把它们都贴出来。