oc底层
H-Perry
Hope for the best, but prepare for the worst.
展开
-
KVO 、 KVC底层学习
1.1、什么是KVO 全称Key-value observing,键值监听;可以用于监听某一个对象的属性的改变。 1.2、 kvo怎么实现对一个对象的属性进行监听的? 对某个属性添加监听后,runtime动态给当前类创建了一个NSKVONotifying_ 类名 的派生类(继承于class对象);而且instance对象的isa指针指向这个class对象; 当instance对象被监听的属性改变的时候(属性改变走的是setter方法,而setter方法存放在class对象中),instance对象就.原创 2020-08-18 22:27:32 · 537 阅读 · 0 评论 -
Block底层学习
1、本质 是一个oc对象,它内部有isa指针;继承于NSObject;比如可以通过调用class方法查看block的类型 Block是封装了函数调用以及函数调用环境的oc对象 2、 block的数据结构 Funcptr为函数调用地址,这里的age为block截取外部的变量 Desc为描述信息结构体,block_size为block的大小 block的调用时候实质是funcptr的实现 3、block的变量捕获 为了保证block内部能正常使用外部变量,block有个捕获机制 对于局部基本原创 2020-08-18 22:16:17 · 190 阅读 · 0 评论 -
Category底层学习
1、Category加载过程本质 在编译的时候,Category会被编译成叫做_Category_t的结构体,里面存储了属性列表、协议列表、对象方法、类方法列表。在程序运行时,runtime会将Category的数据合并到类对象和元类对象中。 运行时通过Runtime加载某一个类的所有Category数据 把所有Category的方法、属性、协议数据合并到一个大数组中,后面参加编译的Category数据会在数组的最前面 将合并后的Category数据,插入到类原来数据的前面 所以Ca...原创 2020-08-18 22:01:56 · 319 阅读 · 0 评论 -
OC底层-OC对象的本质
OC对象的本质 1.1、NSobject 对象底层实际是有一个isa指针的NSObject_IMPL结构体; 1.2、一个object对象会分配的到多少内存? 大小16个字节 ,可以用malloc_size输出查看大小;实际成员isa占用是8(64bit环境下),但是coreFoundtion框架内部规定小于16就分配16; (其实ios操作系统分配内存都是16的倍数,其实对象实际占不了那么大的内存) int 4个 bool 1个 class_getInstanceSize...原创 2020-08-18 21:54:18 · 269 阅读 · 0 评论