美文网首页
Runtime之对象,类

Runtime之对象,类

作者: o0阿拉斯加的狗0o | 来源:发表于2016-12-11 17:01 被阅读20次

对象

我们知道对象是某个的实例,并且这个对象的isa指针指向它所属的类。来看一下它的定义,实际上是一个objc_object类型的结构体。这个结构体指针可以使用id来代替,所以id可以指向任何对象。

typedef struct objc_object *id;
对象的定义

先来看一下runtime中的定义:

typedef struct objc_class *Class;
类的定义
可以看到,类中定义了成员变量old_ivar_list,方法列表old_method_list,遵守的协议old_protocol_list
当我们调用[receiver message]来给一个对象发送消息时,这个对象会跟isa找到对象所属的类,看类中能不能响应这个消息,如果不能响应,会继续根据superclass去寻找父类。
Objective-C中的类本质上也是对象,称为类对象对象都是某个类的实例,那么类对象又是什么类的对象呢?元类
Objective-C中又个非常特殊的类,NSObject,类都继承于这个类,这个类只有一个成员变量isa指针,继承于NSObject的类都继承了这个成员变量。 NSObject类定义

元类(metaclass)

我们上面提到,Objective-C中的类也是对象,它是元类的实例。
上面说到,我们调用实例方法,对象会根据isa找到类,看类能不能响应。
如果调用类方法,同样类对象也会根据isa找到元类,看元类能不能响应这个类方法。

实例方法保存在类中,类方法保存在元类中

那么问题又来了,元类是对象吗?如果是,它是什么类的实例?
元类也是对象,是某个类的实例,元类是根元类(root metaclass)的实例。
<a name="fenced-code-block">所有元类所属的类都是同一个根元类</a>,根元类也是元类,它所属的类也是根元类,就是它本身。根元类就是根类的元类,就是根类NSObject对应的元类
看一张图:

相关文章

  • Runtime 与 Aspects

    Runtime 之 isa指针 1.横向看:实例是对象,类也是对象(类对象),meta类也是对象(原类对象)这是很...

  • Runtime之对象,类

    对象 我们知道对象是某个类的实例,并且这个对象的isa指针指向它所属的类。来看一下它的定义,实际上是一个objc_...

  • Runtime:OC对象、类、元类的本质

    零、Runtime是什么一、OC对象的本质二、OC类的本质三、OC元类的本质四、Runtime关于对象、类、元类的...

  • 一、OC对象模型

    iOS runtime 之 Class 和 MetaClass首先,对象、类和元类的概念,看下面的图和代码可以了解...

  • Objective-C Runtime(三)Method Swi

    Runtime 3 Method Swizzling Objective-C Runtime(一) 简介 对象、类...

  • iOS开发 Runtime 流程图

    你了解多少Runtime? isa 指针的理解 实例对象 isa 指向类对象 类对象指 isa 向元类对象 元类对...

  • Runtime源码 成员变量与属性

    上篇文章我们了解了类、对象和isa在runtime中的表示,现在来看看runtime对成员变量和属性的处理。在此之...

  • Objective-C Runtime(四)isa swizzl

    Runtime 4 isa swizzling Objective-C Runtime(一) 简介 对象、类的结构...

  • iOS开发经验(14)-runtime

    目录 回顾类&对象&方法 OC的动态特性 Runtime详解 应用场景 Runtime缺点及Runtime常用函数...

  • Category实现原理

    依赖runtime 动态的将分类的方法和类方法合并到类对象和元类对象的方法列表中 (对实例对象 类对象 元类对...

网友评论

      本文标题:Runtime之对象,类

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