Chi*_*odo 4 iphone objective-c
我需要打电话给我班上的祖父母方法.
@class Grandparent
+--->@class Parent
+---->@class Child
Run Code Online (Sandbox Code Playgroud)
每个类都实现一个方法:
-(void)foo
Run Code Online (Sandbox Code Playgroud)
如果我想从子类调用父方法foo,我使用:
[super foo]
Run Code Online (Sandbox Code Playgroud)
如果我想打电话给祖父母的foo,我该怎么办?打电话是不可能的
[super [super foo]]
Run Code Online (Sandbox Code Playgroud)
蚂蚁想法?
当然,您可以在父类的帮助下完成此任务.如果你的foo调用[super foo]和你的超类反过来调用,[super foo]因为它期望这种行为,那么你就完成了.这是一种常见的模式(例如-init和-dealloc).
但是你不能直接使用普通的Obj-C语法跳转.每个子类都围绕其状态和方法为类定义自己的语义集.如果您可以在继承链的任何地方随意调用实现,而中间实现不了解它的任何内容,那么任何实现都不会保证其自身状态的完整性,并且它会破坏类的抽象.
换句话说,我讨厌成为这样说的人,你应该重新考虑你的设计,如果这似乎是你真正想要做的.(如果是这样,请随意打开一个新问题来讨论对象模型的设计.这里的人很乐意提供帮助.)
也就是说,从技术上讲,我怀疑你可以通过直接处理Obj-C运行时来实现这一点.您可以获取对象的类引用,然后是它的超类,然后是它的超类,并从中获取所需的方法实现.然后用你的对象调用它.这个代码是读者的练习.:) 这是文档.
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |