2015-03-31 134 views
1

它已经共同建议使用NSAppKitVersionNumber检查通过Cocoa框架在运行时提供的新功能:OS X 10.10 Yosemite为什么`NSAppKitVersionNumber10_10`不包含在`NSApplication.h`中?

https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/

一个典型的利用,这是地板()的值,并对照在NSApplication.h中提供的值。例如:

if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8) { 
    /* On a 10.8.x or earlier system */ 
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_9) { 
    /* On a 10.9 - 10.9.x system */ 
} else { 
    /* 10.10 or later system */ 
} 

在OS X 10.10和Xcode的6.2,NSApplication.h包括:

/* The version of the AppKit framework */ 
APPKIT_EXTERN const double NSAppKitVersionNumber; 

#define NSAppKitVersionNumber10_0 577 
#define NSAppKitVersionNumber10_1 620 
#define NSAppKitVersionNumber10_2 663 
#define NSAppKitVersionNumber10_2_3 663.6 
#define NSAppKitVersionNumber10_3 743 
#define NSAppKitVersionNumber10_3_2 743.14 
#define NSAppKitVersionNumber10_3_3 743.2 
#define NSAppKitVersionNumber10_3_5 743.24 
#define NSAppKitVersionNumber10_3_7 743.33 
#define NSAppKitVersionNumber10_3_9 743.36 
#define NSAppKitVersionNumber10_4 824 
#define NSAppKitVersionNumber10_4_1 824.1 
#define NSAppKitVersionNumber10_4_3 824.23 
#define NSAppKitVersionNumber10_4_4 824.33 
#define NSAppKitVersionNumber10_4_7 824.41 
#define NSAppKitVersionNumber10_5 949 
#define NSAppKitVersionNumber10_5_2 949.27 
#define NSAppKitVersionNumber10_5_3 949.33 
#define NSAppKitVersionNumber10_6 1038 
#define NSAppKitVersionNumber10_7 1138 
#define NSAppKitVersionNumber10_7_2 1138.23 
#define NSAppKitVersionNumber10_7_3 1138.32 
#define NSAppKitVersionNumber10_7_4 1138.47 
#define NSAppKitVersionNumber10_8 1187 
#define NSAppKitVersionNumber10_9 1265 

值得注意的是缺少的是NSAppKitVersionNumber10_10为OS X 10.10约塞米蒂。

是否已将10_10版本明确排除,并且出于何种原因?

这些常量通常只显示在版本之后它们是最新的吗?

或者这种检查版本号的方法现在已过时?如果是这样,那么替换是什么?

回答

2

这些常量通常只在当前的版本中才显示出来吗?

是。同样,10.9 SDK只能定义到NSAppKitVersionNumber10_8

您会注意到您引用的代码片段没有包含明确的10.10检查。这是所有其他检查后的隐含回退。

+0

好知道,但我还是不明白的*原因*不包括OS X 10.10'10_10'。 – pkamb 2015-04-14 17:58:01

+1

我在猜测,因为当10.10 SDK处于测试阶段时,10.10的运输AppKit的实际版本号尚未最终确定。也就是说,SDK必须在框架之前完成。 – 2015-04-15 01:10:01

2

正如Ken指出的那样,NSAppKitVersionNumber并不明确。另外一个方面需要注意的是可用性,通知例如:

NSAppKitVersionNumber10_8

The AppKit framework included in OS X v10.8. 
Available in OS X v10.9 and later. 

NSApplication.h未来版本的一个假设的例子:

#define NSAppKitVersionNumber10_10 1343.14 

可能等同于:

NSAppKitVersionNumber10_10

The AppKit framework included in OS X v10.10. 
Available in OS X v11.0 and later. 

有可能的版本检查证明是有用的其他一些有用的常量:在头

标志更新的API:

页眉新的API都标有装饰,其中包括到引用“10_10”:

NS_AVAILABLE_MAC(10_10) 
NS_AVAILABLE(10_10, <iOS Release>) 
NS_CLASS_AVAILABLE(10_10, <iOS Release>) 
NS_ENUM_AVAILABLE(10_10) 

构建体:

#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10 
... 
#endif 

已过时的API都标有:

NS_DEPRECATED_MAC(<Release when introduced>, 10_10) 
NS_DEPRECATED_MAC(<Release when introduced>, 10_10, "Suggested alternative”) 

在10.10,弃用的属性已经被添加到许多以前 软不赞成的方法。请注意弃用警告和 修改您的代码以使用受支持的替代方法。搜索NS_DEPRECATED_MAC的AppKit 标题并过滤10_10将产生受影响的符号的 列表。

AppKit Framework Reference

相关问题