zoukankan      html  css  js  c++  java
  • isa和superclass


    isa指针

    instance对象的isa指向class对象,当调用对象方法时,通过instance对象的isa找到class,最后找到对象方法的实现进行调用。

    class对象的isa指向meta-class,当调用类方法时,通过class对象的isa找到meta-class,最后找到类方法的实现进行调用。

    //调用对象方法
    objc_msgSend(obj,sel_registerName("objMethodName"))
     
    //调用类方法
    objc_msgSend(objc_getClass("className"), sel_registerName("classMethodName"))


    假如存在以下继承关系: Stundent->Person->NSObject。

    superclass指针

    当Student的instance对象要调用Person的对象方法时,会先通过isa找到Student的class,然后通过superclass找到Person的class,最后找到相应的对象方法进行调用。

    当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class,最后找到类方法的实现进行调用。

    总结

    • instance的isa指向class
    • class的isa指向meta-class
    • meta-class的isa指向基类的meta-class
    • class的superclass指向父类的class,如果没有父类,superclass指针为nil
    • meta-class的superclass指向父类的meta-class,基类的meta-class的superclass指向基类的class
    • instance调用对象方法的轨迹:isa找到class,方法不存在,就通过superclass找父类
    • class调用类方法的轨迹:isa找meta-class,方法不存在,就通过superclass找父类

    如图讲解

  • 相关阅读:
    idea 设置注释
    SVN解决冲突
    mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误
    如何查看JDK以及JAVA框架的源码
    一道常被人轻视的前端JS面试题
    Js 常用调试的方法
    主要的Ajax框架都有什么?
    Ajax使用的五步法
    Java正则表达式
    查出在当天所处的日期区间的某些数据
  • 原文地址:https://www.cnblogs.com/junhuawang/p/13573176.html
Copyright © 2011-2022 走看看