例如,假设我想在调用 super.viewDidLoad()
时跳过一级。所以我希望能够做这样的事情:
override func viewDidLoad() {
super.super.viewDidLoad()
}
或
-(void)viewDidLoad {
[[super super] viewDidLoad];
}
这段代码不会编译。这可以通过其他解决方案实现吗?
最佳答案
仅出于说明目的,以下代码按要求执行。它只有在没有 ARC 的情况下编译时才会崩溃,这意味着它有一个错误。它不进行错误检查。
切勿使用此代码,除非您正在尝试学习。
@import Foundation;
#import <objc/runtime.h>
#import <objc/message.h>
@interface M : NSObject
- (void)print;
@end
@implementation M
- (void)print { NSLog(@"M"); }
@end
@interface N : M
@end
@implementation N
- (void)print { NSLog(@"N"); }
@end
@interface O : N
@end
@implementation O
- (void)print {
Class mysupersuper = [[self superclass] superclass];
Method supersuperMethod = class_getInstanceMethod(mysupersuper, _cmd);
method_invoke(self, supersuperMethod);
}
@end
int main(int argc, char **argv)
{
O *o = O.new;
[o print];
return 0;
}
我使用以下命令编译它:clang -framework Foundation -fno-objc-arc -fmodules test.m
。
关于objective-c - 是否有可能比最近的父类(super class)(即 super.super)更深入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873014/