Objective-C

【iOS】类的本质与isa指针

2017-08-26  本文已影响47人  Colleny_Z
效果图1 效果图2

objc_class结构体的定义:

假设我们创建一个Person类:

创建p对象:Person * p = [Person new] ;

在创建一个对象p之前,在堆内存中就先存在了一个该类(Person)的类型对象(类对象),类对象在编绎时系统会为我们自动创建。
创建一个对象之后,在堆内存中会创建了一个p对象,该对象包含了一个isa指针的成员变量(第一个属性),isa指针则指向在堆里面存在的类对象, 在栈内存里创建了一个该类的指针p,p指针指向的是isa地址,isa指向Person.

图1所示,Class是一个指向objc_class(类)结构体的指针,而id是一个指向objc_object(对象)结构体的指针。objec_object(对象)中isa指针指向的类结构称为objec_class(该对象的类),其中存放着普通成员变量与对象方法 (“-”开头的方法)。objec_class(类)中isa指针指向的类结构称为metaclass(该类的元类),其中存放着static类型的成员变量与static类型的方法 (“+”开头的方法)。

类对象(class object)

元类对象(metaclass object)

这里的,类对象是元类对象的一个实例,元类也是对象,也应该是其他类的实例

用官方的图标简单的标识就是如下:

Paste_Image.png

如有错误,希望一起探讨交流!

上一篇 下一篇

猜你喜欢

热点阅读