Cocoa Xcode-预处理器指令检查正在使用哪个SDK

Cocoa Xcode-预处理器指令检查正在使用哪个SDK,cocoa,xcode,preprocessor,Cocoa,Xcode,Preprocessor,我正在对使用OS X v10.6中不推荐使用的函数的现有库进行一些更改。我想使用预处理器指令来消除警告,以检查当前构建使用的SDK版本。大概是这样的: NSDate *newDate= nil; #if OS X v10.6 (or newer) newDate= [someOtherDate dateByAddingTimeInterval:60]; #else newDate= [someOtherDate addTimeInterval:60]; #endif 使用Xcode 4是否可

我正在对使用OS X v10.6中不推荐使用的函数的现有库进行一些更改。我想使用预处理器指令来消除警告,以检查当前构建使用的SDK版本。大概是这样的:

NSDate *newDate= nil;

#if OS X v10.6 (or newer)
newDate= [someOtherDate dateByAddingTimeInterval:60];
#else
newDate= [someOtherDate addTimeInterval:60];
#endif
使用Xcode 4是否可能做到这一点?

从10.0开始,这一点如何

您可以执行运行时检查,而不是执行编译时检查:

if ([[NSDate class] instancesRespondToSelector:@selector(dateByAddingTimeInterval:)]) {
  newDate = [someOtherDate dateByAddingTimeInterval:60];
} else {
  newDate = [someOtherDate addTimeInterval:60];
}

但是,如果使用10.6SDK构建它,它将无法使用10.5。如@Dave所说,需要运行时检查

您可以使用与我在中描述的完全相同的技术


只要在说明中用NSDate替换CLLocation,用addTimeInterval:替换getDistanceFrom:和用dateByAddingTimeInterval:替换distanceFromLocation:和dateByAddingTimeInterval:就可以始终使用dateByAddingTimeInterval:无论您使用的是什么SDK,也不管您运行的是什么操作系统版本。

这只是一段示例代码,我现在真的不需要增加时间。理想情况下,该库可以在所有或大多数版本的OSX和iOS上运行。如果您这样做,您将在构建时更改一次行为。如果该代码构建一次并在任何地方运行,它将在旧平台上调用10.6代码。
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
    newDate = [someOtherDate dateByAddingTimeInterval:60];
#else
    newDate = [someOtherDate addTimeInterval:60];
#endif