美文网首页
iOS编程中isa指针详解

iOS编程中isa指针详解

作者: 单线程Jack | 来源:发表于2019-08-16 15:18 被阅读0次

isa指针:
OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都有一个isa指针,指向该指针的类。每一个类描述了一系例他的实例的特点,包括成员变量的列表,成员函数的列表。每一个对象都可以接收消息,而对象接收消息列表保存在他所对应的类中。

当我们初始化一个对象的时候,是怎么发送消息的

NSObject *obj=[[NSObject alloc] init];

调用方法,其实是给对象发送消息,在编译时这句话会翻译成一个C的函数调用,即:

objc_msgSend(objc_msgSend([NSObject class],@selector(alloc)),@selector(init));

使用这个函数的需要引入头文件:

#import <objc/message.h>

那不是把 OC代码转换成C。c语言函数在调用编译的时候就会决定调用哪个函数,而oc是一种动态语言,他会尽可能把代码的从编译链接是推迟到运行时,这就是oc运行时多态。
给一个对象发送消息,并不会立即执行,而是在运行的时候在去寻找他对应的实现

在Xcode中打开,NSObject.h和objc.h,我们可以看到,NSObject就是一个包含isa指针的结构体,按照面向对象的设计原则,所有的事物都应该是对象,所以严格的说oc并不是完全面向对象的(应为含有int double 类型的变量)。在oc语言中,每一个类实际上也是一个对象。每一个类也有一个isa指针。每一个类也可以接收消息,例如代码[NSObject alloc],就是向NSObject这个类发送名为 “alloc” 的消息。

在oc中,因为类也是一个对象,所以也必须是另外一个类的实例,这个类就是元类(metaclass)。元类保存了类方法的列表。当一个类方法被调用的时候,元类会首先查找他本身是否有该方法的实现,如果没有,则元类会向他的父类查找方法,这样就可以一直找到继承链的头。
元类也是一个对象,元类的isa指针又指向哪里呢?为了设计的完整性,所有的元类的isa指针都会指向一个根元类。根元类的isa指针又会指向他自己,这样就形成了一个闭环。


架构图片.png

相关文章

  • iOS编程中isa指针详解

    isa指针:OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都...

  • iOS Runtime中isa指针详解

    一、Runtime中数据结构   Runtime 又叫运行时,是一套底层的 C 语言 API,是 iOS 系统的核...

  • 4-1 内存管理

    1.内存布局 2.iOS内存管理方案 [isa指针保存了内存管理的信息] 2.iOS内存管理方案 [isa指针...

  • IOS - 64位中 isa 区域的变化

    原文链接 不再是指针的 isa 在 iOS arm64 的架构中,属于 Objective-C 对象的 isa 空...

  • iOS 对象和isa指针详解

    一个objc对象的isa指针指向他的类对象,类对象的isa指针指向他的元类,元类的isa指针指向根元类,所有的元类...

  • iOS Runtime详解及应用场景

    一 runtime简介 二 Class的结构 三 isa指针详解 四 method详解 五 方法调用及消息转发流程...

  • iOS底层之类的重要组成部分-isa结构体分析

    前言 iOS中每个OC对象都有一个isa指针,那么这个isa指针又是什么呢,里面都有什么信息呢?接下来让我们一起探...

  • iOS中的isa指针

    什么是isa OC是一门面向对象的语言,每一个对象都是类的一个实例,在OC语言内部,每一个对象都有一个isa指针,...

  • iOS中的isa指针

    isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的...

  • Runtime 消息发送

    1、isa 详解 isa 在 arm64 架构之前就是一个普通的指针,存储着 Class、Meta-Class 对...

网友评论

      本文标题:iOS编程中isa指针详解

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