继承自弱链接的iOS类或不在部署目标iOS版本中的类

时间:2012-05-12 03:39:53

标签: objective-c ios inheritance properties weak-linking

我的代码中有一个类(我们称之为myRefLib),它继承自UIReferenceLibraryViewController(UIKit Framework的一部分),这是一个仅在iOS 5及更高版本中可用的类。我想有一个iOS 3.2的部署目标。

如果我只是创建UIReferenceLibraryViewController的实例,我知道我可以使用5的基本SDK,然后在运行包含它的任何代码之前测试该类是否与[UIReferenceLibraryViewController类]一起存在。但是,如果我从班级继承,我该怎么做呢?

问题是我必须#include继承类myRefLib用于我将使用它的代码部分 - 但是没有办法在运行时有条件地执行此操作。或者,运行时也无法有条件地从myRefLib中的UIReferenceLibraryViewController继承。我还想让myRefLib的一个实例成为另一个类的属性 - 再次,如何有条件地执行该运行时?

任何帮助都非常感谢...

d

1 个答案:

答案 0 :(得分:1)

嗯,首先,你知道在早期操作系统上运行时你要做什么。基本上,您必须编写代码,就好像您正在构建iOS 3.2 SDK。只有这样才能使用更新的功能添加可选的增强功能。

从最简单的事情开始:您不需要声明类接口,以便将变量(包括实例变量)声明为该类的指针。你只需要一个前瞻声明:

@class SomeClass;
SomeClass* foo;

接下来,导入定义您的类的标头应该没有问题。这是一个编译时的事情,你似乎认为这是一个问题,但这意味着它不受运行时环境的影响。它将编译,因为您正在构建iOS 5.0 SDK。

你必须要小心的是,如果它不可用,不要使用。您已经知道如何检查:测试[SomeClass class]是否返回Nil。如果是,请不要实例化自定义子类。

最后,您提到“运行时有条件地从myRefLib中的UIReferenceLibraryViewController继承”。为什么你认为你需要这样做?如果UIReferenceLibraryViewController不可用,那么想要使用它的子类myRefLib没有多大意义。如果您有一些不依赖于UIReferenceLibraryViewController的替代实现,那么请创建一个单独的类。然后根据可用性在myRefLib和其他类之间进行有条件的选择。

相关问题