【问题标题】:Super of certain class in Objective CObjective C中某个类的超级
【发布时间】:2011-10-07 01:04:29
【问题描述】:

如何向某个超类发送消息? 例如:

@interface A: NSObject;

@interface B: A;

@interface C: B;

@implementation C

- (id)init {
  [super init];
}

,其中“super”是 A 类,但不是 B

【问题讨论】:

  • 您为什么要这样做?它违反了面向对象继承的一个非常基本的方面。
  • 为什么不呢?我想覆盖超超类的方法,但所有其他方法 - 从超类。我可以用 C++ 做到这一点。
  • 我的类树很大,我想减少一个方法的实现,但不要在超超类中触及该方法的实现。
  • 也许你可以在B中定义一个方法绕过B,调用A的方法。当然,如果您要绕过很多课程,这可能会很烦人......
  • 是的,它实际上是解决方案,但我无法修改 A 类和 B 类中的代码。我需要在 C 类文件中进行。

标签: objective-c class superclass super


【解决方案1】:

您总是可以为任何类的选择器获取 IMP,然后手动调用它。

@implementation C
- (id)init
{
    IMP a_init = [A instanceMethodForSelector:_cmd];
    return a_init(self, _cmd);
}
@end

你也可以单行,return [A instanceMethodForSelector:_cmd](self, _cmd);

郑重声明,_cmd 是 Objective-C 提供给你的,是当前方法的SEL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多