美文网首页
07-12、类的本质

07-12、类的本质

作者: 山中石头 | 来源:发表于2017-09-22 12:45 被阅读0次

    类的本质:
    类其实也是一个对象, 这个对象会在这个类第一次被使用的时候创建
    只要有了类对象, 将来就可以通过类对象来创建实例对象
    实例对象中有一个isa指针, 指向创建自己的类对象

    类对象中保存了当前对象所有的对象方法
    当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找

    Snip20170922_23.png Snip20170922_25.png
    Snip20170922_22.png Snip20170922_26.png Snip20170922_27.png Snip20170922_29.png Snip20170922_31.png

    虚线是isa,实线是继承关系


    Snip20170922_24.png Snip20170922_30.png
    类的本质的总结(重要)

    每个对象都有isa,实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向根元类对象,根元类对象的isa指向自己。根元类对象就是NSObject元类对象。
    知道isa的指向之后还要知道继承关系:“类对象”的继承关系就是“元类对象”的继承关系,为什么这样继承呢?这样继承的目的是为了方法(类对象方法和类方法)的查找,因为类对象里主要存储的是属性和对象方法列表,而元类对象中主要存储的是类方法列表,而调用方法然后去查找方法的顺序是:先在当前类中找,找不到根据继承关系去父类中找,那么无论查找对象方法还是类方法都是先在当前类中找,找不到根据继承关系去父类中找,类对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找。类的对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找,而类的类方法调用查找是在当前类元类对象中找,找不到根据继承关系去父类的元类对象中找。

    注意:通过对类的本质学习可以通过C语言模拟一个OC的类。

    相关文章

      网友评论

          本文标题:07-12、类的本质

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