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

时间:2011-05-19 23:23:52

标签: cocoa xcode preprocessor

我正在对使用OS X v10.6中弃用的“addTimeInterval:”函数的现有库进行一些更改。我想使用预处理程序指令来抑制警告,以检查当前构建使用的SDK版本。像这样:

NSDate *newDate= nil;

#if OS X v10.6 (or newer)
newDate= [someOtherDate dateByAddingTimeInterval:60];
#else
newDate= [someOtherDate addTimeInterval:60];
#endif

这是否可以使用Xcode 4?

3 个答案:

答案 0 :(得分:4)

从10.0开始,+[NSDate dateWithTimeIntervalSinceNow:]怎么样?


也许不是进行编译时检查,而是可以进行运行时检查:

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

答案 1 :(得分:1)

#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
    newDate = [someOtherDate dateByAddingTimeInterval:60];
#else
    newDate = [someOtherDate addTimeInterval:60];
#endif

但如果使用10.6 SDK构建它,它将不适用于10.5。需要运行时检查@Dave说。

答案 2 :(得分:0)

您可以使用我在CLLocation getDistanceFrom: vs distanceFromLocation:

中描述的完全相同的技术

Juste将CLLocation替换为NSDate,将getDistanceFrom:替换为addTimeInterval:,将distanceFromLocation:替换为dateByAddingTimeInterval:,并且您将能够无论您使用的是什么SDK,无论您运行的操作系统版本是什么,都始终使用dateByAddingTimeInterval: