OC 类结构 浅浅谈

在讨论之前先谈一下实例对象、类对象、元类对象

Person * p = [[Person alloc]init];

Class  p1 = [Person class];
Class  p2 = p.class;
Class  p3 = objc_getClass(p)

上面 p1 p2 p3 内存地址是相同的因为他们都是只有一个类对象

Class p4 = objc_getClass(p1); ///元类

实例对象:类初始化出来的对象叫实例对象
类对象:元类初始化出来的东西叫类对象
元类对象:元类是类对象所属的类,是比较虚拟的系统帮我们实现
元类对象的归属是Root_metaclass 根元类根元类的归属是自己

isa走位图

isa:oc里面对象的定义是objc_object,他里面包含了一个isa指针那么那个isa是一个isa_t类型的联合体(union,比较优秀的数据结构节省资源。数据共享一片内存),

objc_class

oc里面类的基本实现是objc_class,他继承objc_object

image.png

isa占用8字节,superclass占用8字节内存,cache占用16字节内存,最重要的核心是bits,因为他里面包含了class_rw_t数据

class_rw_t

image.png

method_array_t、property_array_t、protocol_array_t他们都继承list_array_tt,这个list_array_tt是一个类,他里面有三个属性protected、private、public,当我们对方法或属性协议进行声明时不同的权限会放入不同的区域,来进行区分,还有一个只读属性class_ro_t,只读属性一旦声明不能被外界更改所以存在另一个结构体里

image.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容