美文网首页
iOS基础知识(三)对象本质

iOS基础知识(三)对象本质

作者: shuaikun | 来源:发表于2020-11-30 16:30 被阅读0次

一、对象的本质:

对象:OC对象的本质是结构体,结构体内部是一个指针

image.jpeg
1、引申:一个OC对象最少占用几个字节?
  • 一个指针占用8个字节,但是Foundation 框架硬性规定:分配内存时,一个对象最少会分配16个字节;
  • 函数:malloc_size ()(allocwithZone---createInstanceFromZone--- cls->instanceSize。 一旦发现分配内存小于16,就把它变成16.)
  • 遵循内存对其原则,分配的内存都为16的倍数。

二、对象:

iOS对象分为实例对象、类对象、元类对象。

1、实例对象:
  • isa指针;
  • 成员变量具体的值;
2、类对象:
  • isa指针;
  • superclass 指针;
  • 对象方法;
  • 协议;
  • 属性;
  • 成员变量;
3、元类对象:
  • isa指针;
  • superclass 指针;
  • 类方法;

三、isa与superclass

1、实例对象的isa指向类对象;类对象的isa指向元类对象;
  • 当调用实例方法时:实例对象通过isa找到类对象,调用类对象里的实例方法;
  • 调用类方法时同理。
2、类对象的superclass指向父类;
  • 当调用父类的实例方法时:实例对象通过isa找到类对象;类对象通过superclass找到父类,进而找到父类里的实例对象方法;
  • 调用父类的类方法同理。

四、类对象的结构

  1. class、meta-class对象的本质结构都是struct objc_class
  2. 源码
image.jpeg
  1. class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容;
  2. class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容;

相关文章

网友评论

      本文标题:iOS基础知识(三)对象本质

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