使用iOS 5功能而不会破坏向后兼容性

时间:2011-09-05 07:06:05

标签: iphone ios xcode backwards-compatibility

我的应用程序目前是针对最新的iOS 4.x SDK编译的。一旦iOS 5.0 SDK出来,我是否可以在我的应用程序中使用新的iOS 5.0 SDK功能,然后让它在iOS 4设备上运行(但部件使用新功能已禁用)?

2 个答案:

答案 0 :(得分:10)

为了回答这个问题,Objective-C运行时是完全反射的,这意味着您可以查询对象支持的方法(通过respondsToSelector:)并在运行时按名称获取类(通过{{ 1}})。 iOS二进制文件也支持与框架的弱链接的概念,这意味着如果框架可用,框架将被加载,但如果框架不可用,则不认为它是致命错误(默认行为)。

这意味着当Apple发布新版本的操作系统时,您可以编写使用最新版操作系统上的新功能的代码,但如果这些新功能是API的新功能,则无需使用它们。

Apple有时也会提供非新API的新SDK功能,例如将Clang静态分析器添加到Xcode时。由于这些功能通常不需要任何运行时支持,因此它们完全可用。 iOS 5有点独特,因为Apple对LLVM项目的承诺表明ARC中有一些新的编译时功能依赖于某些运行时支持。所以他们将无法使用,如果它们确实是苹果打算分发它们的工具。

答案 1 :(得分:9)

您可以在运行时检查某些功能是否可用。

例如:

Class motionManagerClass = NSClassFromString(@"CMMotionManager");
if(motionManagerClass) {
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    if([motionManager isGyroAvailable]) {
        //iOS device with gyro
    }else {
        //right iOS but device has no gyro
    }
}else{
//wrong iOS
}