问题描述
|
我正在对使用\“ addTimeInterval:\”函数的现有库进行一些更改,该函数在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以来一直存在的ѭ1怎么样?
也许不用进行编译时检查,而可以进行运行时检查:
if ([[NSDate class] instancesRespondToSelector:@selector(dateByAddingTimeInterval:)]) {
newDate = [someOtherDate dateByAddingTimeInterval:60];
} else {
newDate = [someOtherDate addTimeInterval:60];
}
,#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所说的运行时检查。
,您可以使用我在CLLocation getDistanceFrom:vs distanceFromLocation中描述的完全相同的技术:
只需在说明中将CLLocation
替换为NSDate
,将getDistanceFrom:
替换为addTimeInterval:
,将distanceFromLocation:
替换为dateByAddingTimeInterval:
,无论您使用的是哪个SDK,无论运行的是哪个OS版本,都可以始终使用dateByAddingTimeInterval:
。