gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:21:12 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com