场景
某SDK中有类ClassB
,继承类ClassC
,并重写了ClassC
中的实例方法MethodC
,但在方法实现中并未调用 super 方法。
现在在App中有类ClassA
继承ClassB
,现在需要执行祖类ClassC
中的MethodC
方法逻辑,但是发现父类并未调用祖类方法。
解决
通过直接指定objc_msgSendSuper
中的接收者,从而越过父类,直接调用祖类的方法。代码如下:
- (void)MethodA {
struct objc_super superReceiver = {
self,
[ClassC class]
};
((void (*)(struct objc_super *, SEL))(void *)objc_msgSendSuper)(&superReceiver, _cmd);
}
网友评论