0

我有一个名为 ViewController 的类。如何制作这个类是“metaiosdkViewController”和“JWslideViewController”的子类。帮我语法。我是这样写的

@interface ViewController : MetaioSDKViewController,JWslideViewController

但这给了我错误

4

3 回答 3

4

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

于 2013-07-27T06:22:21.363 回答
1

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

@interface ViewController : MetaioSDKViewController

 @interface MetaioSDKViewController : JWslideViewController

这只是一个想法,我知道您可以根据需要很好地实施

于 2013-07-27T06:28:17.107 回答
1

你想通过多重继承实现什么?你想覆盖这些超类中的每一个的方法吗?请注意,目标 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)实现一个类别:

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

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

但是要注意的一件事是:您不会使用类别覆盖任何内容。相反,您正在提供额外的东西。例如,如果您想要在所有应用程序视图中进行一些自定义绘图,您可以在项目中的 UIView 上定义一个类别,然后您的所有视图都可以简单地包含类别头文件。您甚至不必从该类别继承,您只需从基本类型继承即可。

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

类别不提供额外的数据成员——这是只有继承才能提供的东西。然而,视图控制器之间的多重继承是你绝对应该重新考虑一百次的——你会发现你正在寻找的不是多重继承。

于 2013-07-27T06:45:09.453 回答