2013-07-27 59 views
0

我有一个名为ViewController的类。如何让这个类是“metaiosdkViewController”和“JWslideViewController”的子类。帮助我的语法。 我写这样如何创建两个类的子类

@interface ViewController : MetaioSDKViewController,JWslideViewController 

但是这给了我错误

+0

它应该是错误的。目标C – uchuugaka

回答

1

是Objective-C的犯规支持多重继承,但是你可以给一个家长这样

@interface ViewController : MetaioSDKViewController 

@interface MetaioSDKViewController : JWslideViewController 

这只是一个想法,我知道你可以根据自己的需要

4

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

+0

中没有多重继承可以帮助您获得任何链接或代码.. – datha

+0

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/ – RKY

+2

他们不叫“代表”,而是“协议”。 – 2013-07-27 06:47:08

1

它是什么,你要实现多重继承落实好? 你想重写每个这些超类的方法吗? 注意,目标C提供2个机制的可扩展性:

1)实现一个协议,使你的对象委托:

@interface ViewController : <MetaioSDKViewController,JWslideViewController> 

这加强ViewController如通过2名代表在合同定义为实现某些方法,并且在处理的某个时刻,他们会被叫到。如果你没有实现它们,它们可能根本不会被调用,但你可能无法获得所需的功能。

例如:UITableViewDataSource协议定义了子类实现的许多方法。 cellForRowAtindexPath是您自己的表视图子类必须实现以绘制您自己的自定义单元格的委托方法的非常有名的示例。

请注意,这不是子类在一般意义上提供的可扩展类型。你的班级在这里没有扩展任何功能。相反,它变成了它所说的 - 代表 - 被分配去完成某项任务的人。像你这样的:

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

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

2)实施分类:

这是排序的快捷方式来扩展库类。它们像一个额外的存根,当你的代码运行时,它将自己附加到库对象的已经存在的存储器布局,并提供额外的功能。

您也可以在任何内置类中定义一个类别。实际上这是它用于的主要目标。例如,here是提供HTML转换的NSString类别。有数百个类别作为开源实施,并且在库代码不足的情况下它们提供了巨大的优势。然而,讨论它们的整体适用性不在本讨论的范围内。

但需要注意的一件事是:您不要覆盖任何使用类别。而是你提供额外的东西。例如,如果您希望在所有应用视图中进行一些自定义绘图,则可以在项目中的UIView上定义一个类别,然后所有视图都可以包含类别头文件。你甚至不必从这个类继承,你只需从基类继承。

例如在上面的NSString类别示例中,您不必将NSString定义为NSString + HTML类型。相反,只需将NSString+HTML.h文件包含在任何需要额外方法(如stringByConvertingHTMLToPlainText等)的文件中。所做的更改仅限于您的项目 - 包含此类别的文件。

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

相关问题