对于 OS X 10.10 Yosemite,为什么 `NSAppKitVersionNumber10_10` 不包含在 `NSApplication.h` 中?
Why is `NSAppKitVersionNumber10_10` not included in `NSApplication.h` for OS X 10.10 Yosemite?
通常建议使用 NSAppKitVersionNumber
在运行时检查 Cocoa 框架提供的新功能:
https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/
One typical use of this is to floor() the value, and check against the values provided in NSApplication.h. For instance:
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
for OS X 10.10 Yosemite.
是否明确排除了 10_10
版本,原因是什么?
这些常量是否通常仅在 之后的版本中出现?
或者这种检查版本号的方法现在已经过时了吗?如果是这样,替代品是什么?
Do these constants typically only show up in the version after they are current?
是的。同样,10.9 SDK 仅通过 NSAppKitVersionNumber10_8
.
定义向上
您会注意到您引用的代码片段不包含对 10.10 的显式检查。这只是所有其他检查后的隐式回退。
正如 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.
还有一些其他有用的常量可能对版本检查有用:
在 headers 中标记更新的 API:
headers 中的新 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”)
In 10.10, the deprecated attribute has been added to many previously
soft-deprecated methods. Please be aware of deprecation warnings and
modify your code to use supported alternatives. Searching AppKit
headers for NS_DEPRECATED_MAC and filtering for 10_10 will yield a
list of affected symbols.
通常建议使用 NSAppKitVersionNumber
在运行时检查 Cocoa 框架提供的新功能:
https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/
One typical use of this is to floor() the value, and check against the values provided in NSApplication.h. For instance:
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
for OS X 10.10 Yosemite.
是否明确排除了 10_10
版本,原因是什么?
这些常量是否通常仅在 之后的版本中出现?
或者这种检查版本号的方法现在已经过时了吗?如果是这样,替代品是什么?
Do these constants typically only show up in the version after they are current?
是的。同样,10.9 SDK 仅通过 NSAppKitVersionNumber10_8
.
您会注意到您引用的代码片段不包含对 10.10 的显式检查。这只是所有其他检查后的隐式回退。
正如 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.
还有一些其他有用的常量可能对版本检查有用:
在 headers 中标记更新的 API:
headers 中的新 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”)
In 10.10, the deprecated attribute has been added to many previously soft-deprecated methods. Please be aware of deprecation warnings and modify your code to use supported alternatives. Searching AppKit headers for NS_DEPRECATED_MAC and filtering for 10_10 will yield a list of affected symbols.