如何创建一个类,它是两个类的子类

时间:2013-07-27 06:17:31

标签: ios

我有一个名为ViewController的类。如何使这个类成为“metaiosdkViewController”和“JWslideViewController”的子类。帮我解决语法问题。 我写得像这样

@interface ViewController : MetaioSDKViewController,JWslideViewController

但这给了我错误

3 个答案:

答案 0 :(得分:4)

objective-c不支持多重继承,但是如果你想添加一些额外的行为,你可以通过委托来实现它。

答案 1 :(得分:1)

是的,objective-c不支持多重继承,但你可以给一个父母这样

@interface ViewController : MetaioSDKViewController

 @interface MetaioSDKViewController : JWslideViewController

这只是一个我知道你可以根据需要实施的想法

答案 2 :(得分:1)

您希望通过多重继承实现什么? 您想要覆盖每个超类中的方法吗? 请注意,objective c提供了2种可扩展性机制:

1)实施协议并使您的对象成为委托:

@interface ViewController : <MetaioSDKViewController,JWslideViewController>

这强制ViewController实现2个代表在合同中定义的某些方法,并且在处理的某个时刻,它们被调用。如果你没有实现它们,它们可能根本就没有被调用,但你可能无法获得所需的功能。

示例:UITableViewDataSource协议定义了UITableViewController子类实现的许多方法。 cellForRowAtindexPath是一个非常着名的委托方法示例,您自己的表视图子类必须实现它来绘制您自己的自定义单元格。

请注意,这不是子类在一般意义上提供的可扩展性类型。您的课程不会在此处扩展任何功能。相反,它变成了它所说的 - 代表 - 被指派去完成某项任务的人。像你一样:

yourTableView.delegate = self; //tell self to be the delegate of yourTableview

库代码完成它的工作,并且在某些时候处理它调用[delegate someMethod]。如果你自己的类实现它,它会调用它,否则delegate将为nil,它可能只是NO-OP而你没有获得所需的功能。同样,这是依赖于实现的。也许协议定义了该方法是强制性的,在这种情况下,你的类必须实现这个方法才能编译。

2)实施类别:

这是扩展库类的快捷方式。它们就像一个额外的存根,当你的代码运行时,它会附加到库对象的现有内存布局,并提供额外的功能。

您也可以在任何内置类中定义类别。事实上,这是它的主要目标。例如,here是一个提供HTML转换的NSString类别。有数百个类别作为开源实现,它们在库代码不足的情况下提供了巨大的好处。然而,完全讨论它们的适用性超出了本次讨论的范围。

但有一点需要注意:您不会使用类别覆盖任何内容。相反,你提供额外的东西。例如,如果您想在所有应用视图中使用自定义绘图,则可以在项目中的UIView上定义类别,然后所有视图都可以只包含类别标题文件。您甚至不必继承此类别,只需继承基类型即可。

e.g。在上面的NSString类别示例中,您不必将NSString定义为NSString + HTML类型。相反,您只需将负责的NSString+HTML.h文件包含在您想要stringByConvertingHTMLToPlainText等额外方法的任何位置。这些更改仅限于您的项目 - 包含此类别的文件。

类别不提供额外的数据成员 - 这只是继承可以提供的。然而,视图控制器之间的多重继承是你应该重新考虑的一百次 - 你会发现你所寻找的并不是多重继承。