1

我正在学习为 iphone 编程,我想做一些绘图。我遵循了一些示例代码并将视图控制器子类化,它工作正常。现在,当我想扩展程序时,我遇到了一个设计问题,我可以使用一些帮助。

我用 mynewview 子类化 myviewcontroller。如果我在 myviewcontroller 中有任何代码,我如何在 mynewview 中调用或引用它,反之亦然?我不确定我是否在问这个问题,但我试图了解类和子类之间的关系。

4

2 回答 2

0

Objective-C 中的消息传递系统是动态的。每个对象都包含struct运行时用于自省的 with 信息。在这里,运行时将找到对象能够响应的方法列表。因此,假设您向这样的实例发送消息:

[mynewview someMethod];

运行时将首先检查对象信息以尝试找到一些能够响应消息的方法。如果没有找到,则查询超类,以此类推。实际上,运行时要复杂得多,并且会给任何对象更多响应的机会(这是动态部分。例如,mynewview可能没有调用任何方法someMethod,但可能能够满足调用,但这是你可能会做的事情现在不想担心)。

从子类中,您可以使用键盘调用给定方法的超类实现super,因此如果mynewview是子类,myviewcontroller您可以使用以下方法调用myviewcontroller实现mynewview

[super someMethod]; 

如果in和 insomeMethod都存在,则运行时将自动仅调用子实现,您必须从子实现调用父实现(如果必须)。myviewcontrollermynewview

于 2012-10-10T03:38:24.003 回答
0

Objective-C 对象受益于继承。所有类都是 NSObject 的子类,因此您可以在任何对象上调用 init。如果您创建了一个自定义类并为它提供了一个方法 doSomethingAwesome,那么您可以自由地在自定义类的任何子类中实现 doSomethingAwesome。但是,在子类中声明方法不会将该方法添加到超类中。顺便说一句,我很少发现自己的子类唱我自己的自定义类。我相信鼓励维护所谓的浅对象层次结构。通常我将股票可可类子类化,根据我的需要进行定制,如果我需要在多个子类中自定义方法,我将在超类上声明一个类别,而不是依靠继承来提供我的自定义行为

于 2012-10-10T03:12:01.340 回答