objective-c - 是否有可能比最近的父类(super class)(即 super.super)更深入?

标签 objective-c swift

例如,假设我想在调用 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/

相关文章:

objective-c - type = 1 << 0 是什么意思?

objective-c - 不完整的实现(xcode 错误?)

objective-c - 为什么这两个 "auto boxing"语句给出不同的结果?

ios - 无法从 Swift 中的 UserDefaults 获取具有多个对象的 NSMutableArray

swift - 在不影响资源的情况下处理 Swift DispatchQueue

ios - Facebook 登录与 Swift 崩溃问题

objective-c - Obj-C设计模式: parallel task launcher

ios - UIDatePicker 将一年加一

swift - 如何在 Swift 中定义约束类型?

ios - 单个 cartfile 为多个目标指定和安装依赖项