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中有一些新的编译时功能依赖于某些运行时支持.所以他们将无法使用,如果它们确实是苹果打算分发它们的工具.
您可以在运行时检查某些功能是否可用.
例如:
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)
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |