objective-c - 从弱链接的 iOS 类或不在部署目标 iOS 版本中的类继承

标签 objective-c ios inheritance properties weak-linking

我的代码中有一个继承自 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/

相关文章:

ios - 如何将导航 Controller 放入标签栏 Controller 中?

c++ - 基类的 "default"访问说明符差异的基本原理

c++ - 尽管有友元,但无法访问基类

ios - 如何将选定的表格 View 单元格文本发送到 iOS 中的上一个 View Controller ,Objective C(向后传递数据)

objective-c - XPC 没有为收集正确注册类

ios - 内存管理何时使用release

ios - Storyboard对 cocoapods Storyboard的引用似乎已损坏

ios - 我如何为 UIButton iOS 创建脉动动画?

java - 输入并不会一直传递给 children

ios - 静态和动态单元格的 UITableView 混合?