我的代码中有一个继承自 UIReferenceLibraryViewController(UIKit Framework 的一部分)的类(我们称之为 myRefLib),该类仅在 iOS 5 及更高版本中可用。我想要一个 iOS 3.2 的部署目标。
如果我只是创建 UIReferenceLibraryViewController 的一个实例,我知道我可以使用 5 的基础 SDK,然后在运行任何包含它的代码之前使用 [UIReferenceLibraryViewController 类] 测试该类是否存在。但是,如果我从类继承,我该怎么做呢?
问题是我必须为将使用它的代码部分 #include 继承类 myRefLib - 但无法在运行时有条件地执行此操作。或者,也无法在运行时有条件地从 myRefLib 中的 UIReferenceLibraryViewController 继承。我还想使 myRefLib 的实例成为另一个类的属性 - 同样,我如何有条件地执行该运行时?
非常感谢任何帮助......
D
最佳答案
好吧,首先,您知道在早期操作系统上运行时要做什么。基本上,您必须像针对 iOS 3.2 SDK 构建代码一样编写代码。只有这样,您才能使用更新的功能添加可选的增强功能。
从最简单的事情开始:您不需要声明类接口(interface)即可将变量(包括实例变量)声明为指向该类的指针。您只需要一个前向声明:
@class SomeClass;
SomeClass* foo;
接下来,导入定义您的类的 header 应该没有问题。那是编译时的事情,您似乎认为这是一个问题,但这意味着它不受运行时环境的影响。它将编译,因为您是针对 iOS 5.0 SDK 构建的。
您必须注意的是,如果该类不可用,则不要使用该类。您已经知道如何检查:测试 [SomeClass class]
是否返回 Nil
。如果是,请不要实例化您的自定义子类。
最后,您提到“运行时有条件地从 myRefLib 中的 UIReferenceLibraryViewController 继承”。为什么你认为你需要这样做?如果 UIReferenceLibraryViewController
不可用,那么使用它的子类 myRefLib
就没有多大意义。如果您有一些不依赖于 UIReferenceLibraryViewController
的替代实现,请创建一个单独的类。然后根据可用性有条件地在 myRefLib
和其他类之间进行选择。
关于objective-c - 从弱链接的 iOS 类或不在部署目标 iOS 版本中的类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560885/