美文网首页
Object-C isa指针

Object-C isa指针

作者: sun5kong | 来源:发表于2017-09-06 16:12 被阅读17次

1.什么是isa指针

概念:

Every object has an isa instance variable that identifies the object's class. The runtime uses this pointer to determine the actual class of the object when it needs to.

每个对象都有一个标识对象类的isa实例变量. 运行时使用此指针来确定对象需要的实际类.(isa 可以理解为这是个什么类).

在xcode中用快捷键Shift+Cmd+O 打开文件objc.h 能看到类的定义:



从图可以看出三点:

  1. id类型是一个objc_object结构体的指针
  2. objc_object结构体包含一个Class类型的变量isa
  3. Class是objc_class结构体的指针.

事实上OC中的runtime中, 类是用objc_class结构体表示的, 对象是用objc_object结构体表示的. 这也就解释了为什么id类型可以指向OC中任意对象类型了.

objc_class结构体的结构:

struct objc_class {
    Class isa  //所属类的指针
    Class super_class//指向父类的指针                                        
    const char *name    //类名                                     
    long version            // 版本                                 
    long info                   //供运行期使用的一些位标识。                             
    long instance_size      //实例大小                                 
    struct objc_ivar_list *ivars       //成员变量数组                      
    struct objc_method_list **methodLists  //方法列表                  
    struct objc_cache *cache//指向最近使用的方法.用于方法调用的优化                            
    struct objc_protocol_list *protocols//协议的数组                     
}

看到第一个变量有点崩溃, 但说明了万物皆对象, 类也是对象, 类是meteClass(元类)的实例.

总结一下:

  • 实例对象在运行时蓓表示成objc_object类型结构体, 结构体内部有isa指针指向objc_class结构体.
  • objc_class内部保存了类的变量和方法列表以及其他信息, 并且还有一个isa指针.这个isa指针指向meteClass(元类), 元类里保存了这个类的类方法列表.
  • 元类里也有isa指针, 这个isa指针指向根源类, 根源类的isa指针指向自己.
    第二个参数superClass的实现:


相关文章

  • ios开发进阶-对象模型(1)

    isa 指针 在object-c 中每个对象都有一个isa指针指向它的类。 类中包含信息如下: 1.类的描述信息 ...

  • Object-C isa指针

    1.什么是isa指针 概念: Every object has an isa instance variable ...

  • Object-C对象本质

    Object-C对象本质 OC中对象类型 instance 实例对象isa指针其他成员变量 class 类对象is...

  • iOS 类和对象的区别

    class 和 object 在Object-C的定义 objc_class结构体的实现 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指针--...

  • isa指针

    isa指针 Object-c作为一门面向对象的编程语言,每一个对象就是一个类的实例。然而每一个对象都有一个isa指...

  • iOS NONPOINTER_ISA(非指针类型)

    isa分为POINTER_ISA(指针类型)和NONPOINTER_ISA(非指针类型) POINTER_ISA指...

  • iOS - isa指针

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

网友评论

      本文标题:Object-C isa指针

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