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

spa*_*mat 12 iphone xcode backwards-compatibility ios

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

Tom*_*mmy 10

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

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

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


jus*_*ssi 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
}
Run Code Online (Sandbox Code Playgroud)