iOS isa指针

作者: kindom_0129 | 来源:发表于2019-08-27 10:34 被阅读0次

isa 指针,表示这个对象是一个什么类。而 Class 类型, 也就是 struct objc_class * ,这是苹果在下面的注释中写到的。这说明类本身也是一个对象。在类对象中的 isa 指向的类叫做“元类”,类方法就定义在元类中。总的来说就是,一个类可以有很多的实例,这些实例有着唯一的一个类对象,而这个类对象也有着唯一的一个元类。

实例,类,父类,元类之间的关系

Class super_class
super_class 指向的就是它的父类。
struct objc_ivar_list *ivars
ivars 指向的是成员变量的列表。
struct objc_method_list **methodLists
methodLists 指向的就是方法的列表。在 method_list 中存着 objc_method 类型的数组。而 objc_method 的定义如下:

struct objc_method {
    SEL method_name ;
    char *method_types ;
    IMP method_imp ;
}

typedef id (*IMP)(id, SEL, ...); // IMP 就是一个函数指针
看到这个结构体, 我们应该就很明确 selector 的意义了:selector 其实就是方法的一个标示,而 method_imp 指向的才是真正的函数实现。当我们向对象发送消息后, runtime根据 selector 这个标示,在method_list中找到对应的 objc_method,取到真正的函数的地址,再执行。

struct objc_cache *cache
cache 用来缓存最近调用过的的方法。 如果每次向对象发送消息都要遍历一遍方法列表那会很浪费时间, 所以会把最近调用过的方法放在缓存中。每一次发送消息时,会先查询缓存,缓存中找不到再去方法列表中找。

struct objc_protocol_list *protocols
protocols 指向协议列表。

相关文章

  • 4-1 内存管理

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

  • iOS isa指针

    isa 指针,表示这个对象是一个什么类。而 Class 类型, 也就是 struct objc_class * ,...

  • iOS isa指针

    在Objective-C中,任何类的定义都是对象。类和类的实例没有任何本质上的区别。任何对象都有isa指针。 is...

  • iOS - isa指针

    [toc] 参考 isa指针 isa 简介 isa (is a kind of) 是一个 Class 类型的指针,...

  • iOS ISA指针

    https://opensource.apple.com/tarballs/objc4/[https://open...

  • iOS:isa指针

    一、联合体 1. 概念 联合体,是一种特殊的数据类型,其目的是节省内存。联合体内部可以定义多种数据类型,但是同一时...

  • iOS面试题:objc中向一个nil对象发送消息将会发生什么?

    原文:iOS面试题大全 首先,需要搞明白2个问题: 什么是isa指针 消息传递机制 isa指针是用于对象指向类对象...

  • runtime面试复习

    runtime isa指针的含义 分为指针型isa:isa的値代表Class的地址,非指针型isa :isa的値的...

  • 1.8、iOS面试题之语法

    1、isa指针?(对象的isa,类对象的isa,元类的isa都要说) 对象的isa指针指向所属的类 类的isa指针...

  • iOS-浅谈OC中isa和superclass的指针指向

    目录 isa指针----isa指针指向superclass指针----class对象的superclass指针--...

网友评论

    本文标题:iOS isa指针

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