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