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

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

问题描述:

我的应用程序是针对最新的iOS 4.x版SDK目前编制。一旦iOS 5.0 SDK发布,我是否可以在我的应用程序中使用新的iOS 5.0 SDK功能,并且可以在iOS 4设备上运行它(但使用禁用了新功能的部件)?使用的是iOS 5功能,而不会破坏向后兼容性

+0

可能的重复[你如何可选地使用2.0兼容的应用程序中的iPhone OS 3.0功能?](http://*.com/questions/986589/how-do-you-optionally-use-iphone-os- 3-0的功能-IN-A-2-0兼容的应用程序内) –

+0

参见[如何使iPhone应用程序使用多个SDK(固件)版本兼容(http://*.com/questions/3027120/how -to-化妆与iPhone应用程序兼容与 - 多SDK固件版本)。虽然这些问题的版本较旧,但适用相同的一般原则。 –

一般回答的问题,Objective-C运行是完全反射的,这意味着可以查询该方法的对象支架(经由respondsToSelector:),并通过得到的类保持运行时名称(通过NSClassFromString)。 iOS的二进制文件还支持弱联动的概念,框架,这意味着如果它是可用的框架将被加载,但是,如果框架是不可用你不认为这是一个致命的错误(这是默认行为)。

这意味着,当苹果发布OS的新版本中,你可以编写使用的操作系统,但功能罚款最新版本的新功能没有他们,如果这些新功能是API的新位代码。

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

你可以请检查是否某些功能是可用的或者不运行时。

例如:

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 
}