OC 越过父类,直接调用祖类方法

场景

某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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容