我正在学习编程iphone,我想做一些绘图。我按照一些示例代码并将子视图子类化,并且它工作正常。现在,当我想扩展该程序时,我遇到了一个设计问题,我可以使用一些帮助。
我使用mynewview将myviewcontroller子类化。如果我在myviewcontroller中有任何代码,我如何在mynewview中调用或引用它,反之亦然?我不确定我是否正确地问这个问题,但我正在努力理解类和子类之间的关系。
答案 0 :(得分:0)
Objective-C对象受益于继承。所有类都是NSObject的子类,因此可以在任何对象上调用init。如果您创建了一个自定义类并为其提供了一个方法doSomethingAwesome,那么您可以自由地在自定义类的任何子类中实现doSomethingAwesome。但是,在子类中声明方法不会将该方法添加到超类中。顺便说一句,我很少发现自己的子类会唱我自己的自定义类。我相信鼓励维持所谓的浅层对象层次结构。通常我将库存cocoa类子类化,根据我的需要进行自定义,如果我需要多个子类中的自定义方法,我将在超类上声明一个类别,而不是依赖继承来提供我的自定义行为
答案 1 :(得分:0)
Objective-C中的消息传递系统是动态的。每个对象都包含一个struct
,其中包含运行时用于内省的信息。在这里,运行时将找到对象能够响应的方法列表。所以,假设您发送了一个这样的实例:
[mynewview someMethod];
运行时将首先检查对象信息,以尝试找到一些能够响应消息的方法。如果找不到任何内容,那么将查询超类,依此类推。实际上,运行时要复杂得多,并且会为任何对象提供更多响应的机会(这是动态部分。例如,mynewview
可能没有任何名为someMethod
的方法,但是,可能为了满足这个要求,但这是你现在可能不想担心的事情)。
从子类中,您可以使用键盘super
调用给定方法的超类实现,因此,如果mynewview
是myviewcontroller
的子类,则可以调用myviewcontroller
来自mynewview
的实施:
[super someMethod];
如果someMethod
和myviewcontroller
中都存在mynewview
,则运行时将自动只调用子实现,您必须调用父实现(如果必须)孩子的实施。