下面是我想出的一种检查IOS版本的方法。
#define __PROCESS_INFO ([NSProcessInfo processInfo])
#define CURRENT_IOS ([__PROCESS_INFO operatingSystemVersion])
#define IOS(x) ((NSOperatingSystemVersion){[x integerValue], 0, 0})
#define IOS9 ((NSOperatingSystemVersion){9, 0, 0})
#define IOS10 ((NSOperatingSystemVersion){10, 0, 0})
#define IOS11 ((NSOperatingSystemVersion){11, 0, 0})
#define IS_IOS9 ([__PROCESS_INFO isOperatingSystemAtLeastVersion:IOS9] && \
![__PROCESS_INFO isOperatingSystemAtLeastVersion:IOS10])
#define IS_IOS10 ([__PROCESS_INFO isOperatingSystemAtLeastVersion:IOS10] && \
![__PROCESS_INFO isOperatingSystemAtLeastVersion:IOS11])这样,这种类型的代码更具可读性。
if (IS_IOS9) {
// [... openURL: ...];
}
else if (IS_IOS10) {
// [... openURL:options:completionHandler: ...];
}让我知道你的想法..。
发布于 2016-11-05 16:08:45
如果需要检查某个方法是否存在,还可以通过以下respondsToSelector:检查对象是否支持它:
if ([object respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[object openURL:...options:...completionHandler:...];
} else {
[object openURL:...];
}我认为这种方法比检查操作系统版本更灵活。我见过很多人这么做。
这类似于JavaScript程序员如何检查某些JS特性的存在:如果他们转而检查浏览器版本,代码将无法维护,因为有很多浏览器,并且他们不断地进化。
https://codereview.stackexchange.com/questions/144255
复制相似问题