xcode使用子类中的视图

时间:2012-10-10 03:04:12

标签: ios xcode subclassing

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

[mynewview someMethod];

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

从子类中,您可以使用键盘super调用给定方法的超类实现,因此,如果mynewviewmyviewcontroller的子类,则可以调用myviewcontroller来自mynewview的实施:

[super someMethod]; 

如果someMethodmyviewcontroller中都存在mynewview,则运行时将自动只调用子实现,您必须调用父实现(如果必须)孩子的实施。