类与对象

作者: _nameless | 来源:发表于2016-05-01 16:07 被阅读38次

       当我初始接触到OC的时候,只不过觉得OC中的对象不过是一个结构体,里面存放着结构体变量和相关的函数指针。这的确挺符合面向对象设计思想,但是随着加深对Runtime的理解,便发现不是那么简单。

        事实上OC中的对象比我想象中的更简单。因为它里面仅仅只有一个isa指针。证据如下:

objc_object对象

展现在我们面前的确实很我想象的不一样,没有结构体变量和函数指针。这个isa指针实际上是指向这个对象所属的类,而这个类叫做类对象。比如说在 id obj = [NSObject new];中,obj是实例对象,那么NSObject就是obj的类对象。当我们向一个对象发送一个消息时,会找到这个对象所属的类,然后把消息交给这个类对象处理。那我们接下来看看类对象的定义:

类对象

留意到图片中的最后一行,可以得知类对象也是一个对象。那么向类对象发送一个消息时,它的isa指针会指向什么?比如说:[NSArray arrayWithObjects:XXX];向NSArray这个类对象发送消息时,沿着isa指针找到的是NSArray的元类。那元类也是一个类,它的isa指针又是指向什么?如果我们此时再引入一种新的类,那么这种新的类的isa指针又要指向另一种新的类,这会导致无限循环下去。因此,需要引入根元类的这个概念,使得所有元类的isa指针都指向它,而根元类的isa指针就指向自身。这样就形成了一个消息闭环。说再来也比不上来一张图实际:

一张碾压文字的图

图中还有superClass指针的关系,可以看到元类的superClass指针不像isa指针那样直接指向根元类,而根元类的superClass指针则是指向NSObject。但是这幅图只是针对NSObject的继承体系。

objc_class对象中还有很多变量,本文只要搞清楚类和对象的关系,其他的以后再解释。

相关文章

  • 类与对象(类与对象定义)

    类与对象的定义和使用 如果在程序之中要定义一个类可以使用class关键字完成,而定义的语法如下: 在这个类中只是定...

  • 函数类和对象区别

    类与类:行为不同 对象与对象:数据不同

  • python入门开发学习笔记之类与对象

    本节重点 掌握什么是类、什么是对象 掌握如何定义及使用类与对象 了解对类与对象之间的关系 类与对象的概念 类即类别...

  • 类对象与类的对象

    类对象(obj.getClass)描述的是类的代码信息,比如哪些属性、属性是什么类型、变量名是什么、哪些方法、方法...

  • python-高级、面向对象

    一、类与对象 二、类和对象

  • Java面向对象笔记

    类和对象 对象的概念 什么是面向对象 类 什么是对象的属性 什么是对象的方法 类与对象的关系/与区别 什么是对象 ...

  • 006-面向对象1

    面向过程与面向对象 开车问题 吃饭问题 做饭问题 类与对象 类的概念 对象的概念 练习: 区分类与对象 类的组成 ...

  • 三、元类对象的本质

    1. 元类对象结构。 与类对象的结构一样。 与类对象比较 2. 元类对象的获取。 通过object_getClas...

  • 格物致知iOS类与对象

    格物致知iOS类与对象 格物致知iOS类与对象

  • 类与对象

    类与对象是整个面向对象之中最为基础的组成单元;类是共性的集合,对象是个性的产物。所有的类都是用来描述出对象的结构,...

网友评论

    本文标题:类与对象

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