是否只有在Base SDK为7.0或更高版本时,是否有任何预处理器宏来编译代码的某些部分?"__IPHONE_7_0"定义的常量似乎与iOS开发目标(而不是基本SDK)相关联.
我正在使用安装了iOS 7和iOS 6.1的XCode 5.
我之所以这么说是因为我正在将应用程序从iOS 6转换到iOS 7.有很多东西需要调整,我现在还想用iOS 6.1作为基础SDK编译我的应用程序(和开发目标iOS 6.0),但是我想在每次使用iOS 7 SDK编译时添加一些我想要的代码,但是如果base SDK是iOS 6.1则不能编译.
例:
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
Run Code Online (Sandbox Code Playgroud)
上面这段代码不能用iOS 6.1 base SDK编译,因为它抱怨没有为UITableView定义setSeparatorInset.因此,我想在预处理器指令中包含这段代码,有条件地在基本SDK上.
Ali*_*are 43
您应该阅读Apple的SDK兼容性指南,其中解释了所有这些技术.
特别是,他们建议使用__IPHONE_OS_VERSION_MIN_REQUIRED宏来测试项目的部署目标(最低支持版本),对于您的情况,使用__IPHONE_OS_VERSION_MAX_ALLOWED宏来测试用于编译的Base SDK.
例:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
// Only COMPILE this if compiled against BaseSDK iOS7.0 or greater
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
// Even when compiled with BaseSDK 7, only EXECUTE that if the user uses an
// OS that support this method (namely if the user is running iOS7 or later,
// but not for users running iOS6).
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
#endif
Run Code Online (Sandbox Code Playgroud)
重要说明:您应该在比较中使用数字常量,就好像您测试一样#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0,例如它在使用SDK 6时不起作用,因为__IPHONE_7_0未定义,因此在该上下文中评估为0,并且您的条件将无法按预期工作.
rck*_*nes 20
是的你可以使用__IPHONE_7_0define:
#ifdef __IPHONE_7_0
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
#endif
Run Code Online (Sandbox Code Playgroud)
Moj*_*aba 13
根据Apple Doc,您应该使用它NSFoundationVersionNumber来区分iOS 7和其他.您可以使用以下宏来简化:
#define isIOS6 floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1
#define isIOS7 floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1
Run Code Online (Sandbox Code Playgroud)
然后在代码中做
#ifdef __IPHONE_7_0
if (isIOS7) {
// Do additional stuff for iOS 7.
}
#endif
Run Code Online (Sandbox Code Playgroud)
是的,您应该检查编译时(使用#ifdef)和运行时(使用isIOS7),这样您就可以使用iOS6 SDK,iOS7 SDK和iOS7 SDK以及iOS6目标进行编译.
哦!请记住,你不能if (!isIOS7)使用if (isIOS6).
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/
| 归档时间: |
|
| 查看次数: |
44325 次 |
| 最近记录: |