2012-01-27 84 views
1

在我的情况中,UIViewController B是UIViewController A的子类。由于B是从A继承的(即A是B的父亲),因此B肯定可以访问A中的所有方法和变量。iOS中的子类问题

但是,A需要一个来自B的变量。有没有可能这样做?

谢谢。

+0

@class ...... ???? – 2012-01-27 09:53:23

+0

您是否在讨论在运行时访问实际变量值?如果是这样,有几个选择,例如通知,将数据保存到nsuserdefaults等。 – ader 2012-01-27 09:54:52

+0

我希望A(父)可以访问由运行时由B(子)设置的实例变量。如何设计和编码? – user403015 2012-01-27 09:57:33

回答

0

其实,如果你需要这种类型的关系 - 你的设计是错误的。我的意思是 - 在你的情况下你不需要继承关系,但是像聚合或合成。例如,您的关系类型打破了Liskov替代原则。

但是。目标C接受反向关系。您可以使用委托(@protocol)来描述可以从接受此@protocol的未知对象中检索某些数据的接口。

因此,在你的情况下,B类应该符合提供对B的某些属性的访问的协议.A应该能够使用该协议,即知道A需要的获取者。

0

在子类A中添加该变量作为默认值。然后它在子类B中也可用?

如果这是你不想要的东西,那么我想你的设计有什么问题?

+0

我想要的是A(父)需要访问在运行时由B(子)设置的实例变量。 – user403015 2012-01-27 09:58:36

0

如果在子类中声明的实例变量有一个getter方法,那么超类中的任何方法总是可以询问它的类的对象是否为respondsToSelector:对于该getter方法,如果是,则调用它以获取实例变量。

+0

谢谢。你能告诉我一些你想法的示例代码吗?这对我很有帮助。 – user403015 2012-01-27 10:25:01