美文网首页
看QMUI源码,某个类是否重写了父类的某个方法

看QMUI源码,某个类是否重写了父类的某个方法

作者: 梁森的简书 | 来源:发表于2023-01-18 10:26 被阅读0次

代码

CG_INLINE BOOL
HasOverrideSuperclassMethod(Class targetClass, SEL targetSelector) {
    Method method = class_getInstanceMethod(targetClass, targetSelector);
    if (!method) return NO;
    
    Method methodOfSuperclass = class_getInstanceMethod(class_getSuperclass(targetClass), targetSelector);
    if (!methodOfSuperclass) return YES;
    
    return method != methodOfSuperclass;
}

思路

  1. 获取A类的a方法method1
  2. 获取A类的父类的a方法method2
  3. 比较method1和method2是否相等即能判断A类是否重写了父类的a方法

原因

根据runtime的消息机制,某个类对象收到某个消息后,会先在该类的方法列表中查找该方法,如果查找不到就会到该类的父类方法列表中查找该方法。某个类如果没有重写某个方法,那么获取到的method就是该类的父类中的method。

相关文章

  • 看QMUI源码,某个类是否重写了父类的某个方法

    代码 思路 获取A类的a方法method1 获取A类的父类的a方法method2 比较method1和method...

  • 判断父类是否实现了某方法 - ios

    判断某个类是否实现了某个实例方法 注意在判断父类是不能使用[super class]原因:super 跟 self...

  • Python方法super()

    在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需...

  • Python: 你不知道的 super

    在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需...

  • super() 的入门使用

    原文出处: geekvi super() 的入门使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法...

  • isMemberOfClass,isKindOfClass,is

    1、isMemberOfClass是用来判断某个对象是否为当前类的实例,不能用来判断是否属于某个类的子类,与父类没...

  • Python: 你不知道的 super

    前言 super() 的入门使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能...

  • 继承时,遵守同一协议会怎么执行?

    今天碰到一个疑问,具体是用在父类遵守某个协议,子类继承父类时,父类也实现了协议的方法,有个疑虑是是否会执行子类的方...

  • 常用系统宏定义

    判断该ios系统 是否有某个类/方法

  • super关键字

    super的作用: 直接调用父类中的某个方法 super处在对象方法中,那么就会调用父类的对象方法,super处在...

网友评论

      本文标题:看QMUI源码,某个类是否重写了父类的某个方法

      本文链接:https://www.haomeiwen.com/subject/asoxhdtx.html