是否可以有条件地使用iOS 6功能但仍支持旧设备?

d11*_*wtq 1 iphone objective-c

有时在新版本的iOS中添加了一些很容易使用的功能,但是您不希望仅仅因为一个次要功能而阻止旧设备上的用户使用该应用程序.

我刚刚添加UIRefreshControl到iOS 6中添加的应用程序.我真的不在乎使用第三方解决方案(其中有一个数字),我只是不想调用设置的代码如果我在旧设备上运行它.我怀疑,作为一种静态语言,这是不可能的,但我想我会问,看看是否有办法实现这一目标.

显然,如果我只是共享代码,我可以使用预处理器宏来完成,但我需要构建应用程序以在iOS 5.1 + iOS 6.0上执行.

rck*_*nes 5

这是完全可能的,只需检查一个类是否可用:

if ([UIRefreshControl class]) {
   // the UIRefreshControl is available.
}
Run Code Online (Sandbox Code Playgroud)

它与现有类的新方法相同:

if ([self.someLabel  respondsToSelector:@selector(setAttributedText:)]) {
    // The label support attributed strings
}
Run Code Online (Sandbox Code Playgroud)

Objective-c并不像你想象的那样是静态的,只要确保你弱连接任何早期版本的iOS中没有的框架.