Bad*_*ate 3 cocoa objective-c super
是否可以访问对象超类(或祖父)的超类方法?
例如:
GrandFatherObject : NSObject
SuperObject : GrandFatherObject
SelfObject : SuperObject
Run Code Online (Sandbox Code Playgroud)
来自SelfObject:
- (void)overriddenMethod
{
// For Self
someCode();
// For Parent
[super overriddenMethod];
// For GrandParent
???
}
Run Code Online (Sandbox Code Playgroud)
我只能访问SelfObject(无法修改SuperObject或GrandFatherObject)
Dav*_*ong 10
是的,你可以做到,但它需要的代码多于调用super.
或多或少,它是这样的:
#import <objc/runtime.h>
struct objc_super grandsuper;
grandsuper.receiver = self;
grandsuper.class = class_getSuperclass(class_getSuperclass([self class]));
//if _cmd has a non-struct return value:
id grandsuperReturnValue = objc_msgSendSuper(&grandsuper, _cmd, arg1, arg2, ...);
Run Code Online (Sandbox Code Playgroud)
你为什么想做这个?如果您认为有必要,您应该重新考虑您的课堂设计.当然,您可以随时调用super父类的实现overriddenMethod.
为了正确封装,子类不需要知道除父类之外的任何内容.否则,您在继承层次结构中具有紧密的双向耦合.恶梦.
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |