2015-08-14 75 views
0

我是新来的目标c,我从web开发(php)到ios开发迈出了一大步。

为什么我应该重写和实现超类的方法?
这些方法不是已经存在于它们的超类中吗?

例如,我有一个表视图控制器。为什么不是一个属性:行数,而不是实现一个方法?
为什么我们不实现超类中存在的所有方法?


我想我对对象c中的所有继承系统缺乏了解。为什么我们需要重写方法 - objective c?

感谢

+9

重写方法的概念并不特定于Objective-C。所有OO编程语言都支持此功能。 – rmaddy

+0

所有基于分类的OOP语言。在基于原型的语言中,复制和替换是这个概念。 –

回答

0

在面向对象编程中,方法重写是一种语言功能,它允许子类或子类提供已由其超类或父类之一提供的方法的特定实现。子类中的实现通过提供与父类中的方法具有相同名称,相同参数或签名以及相同返回类型的方法来覆盖(替换)超类中的实现。执行的方法的版本将由用于调用它的对象决定。如果父类的对象用于调用方法,则会执行父类中的版本,但如果使用子类的对象调用该方法,则将执行子类中的版本。 这是面向对象编程的一个非常强大的方面。 例: ç子类B和B子一

它们都具有相同的梅索德打印 如果你有一个实例名称改编 的阵列,因为我在改编{ 打印(I) } 好梅索德打印'将要求每个对象

0

你说的是压倒一切的方法,但你用的tableView给的例子未覆盖的方法。 tableView使用委托模式。在委托模式中,定义了一个协议。我们以UITableView为例:

定义的协议是UITableviewDataSource。这基本上是一个声明,像numberOfRowsInSection这样的方法应该存在于符合这个协议的类中。

当你通过说tableview.dataSource = self告诉tableView你遵守它的UITableViewDataSource协议时,你告诉它你实现了UITableviewDataSource声明中列出的方法。

此模式为tableView创建api,而不需要知道提供它的类。从本质上讲,tableview将通过已定义的UITableviewDataSource api来询问您的类的信息。

您可以在委托模式上进行搜索以查找实施它的优缺点。

+0

谢谢,什么是api?如果我不想使用表视图数据saurce协议,我应该实现这些方法吗? – user3764456

+0

这些问题可以通过简单的Google搜索来解答。 – JAL

相关问题