摘要: block本质:block是封装了函数已经调用环境的oc对象 block底层结构 解析: void *FuncPtr:是block内部函数实现的指针地址 block内部有个变量捕获机制,将局部auto、static变量捕获到block内部 阅读全文
posted @ 2020-08-05 20:34 银榇 阅读(97) 评论(0) 推荐(0)
摘要: 给分类添加成员变量可以使用关联对象技术。 关联对象添加的成员变量并不是存储在被关联对象的内存中,而是存在全局唯一的AssociationsManager中。 追:关联对象什么时候释放?使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 关联对象的生命周期要 阅读全文
posted @ 2020-08-05 20:17 银榇 阅读(181) 评论(0) 推荐(0)
摘要: 思考:load和initialize的区别? 一、调用时机区别 load:runtime加载类、分类时即调用,即只初始化一次 initialize:类第一次接收到消息时才调用,即只初始化一次 二、调用顺序区别 load: { 1.先加载父类(同级别间按照编译先后顺序加载) 2.在加载子类 3.在加载 阅读全文
posted @ 2020-08-05 17:29 银榇 阅读(240) 评论(0) 推荐(0)
摘要: Category底层结构 注意点 1.当我们添加分类时,在编译阶段信息都存储在category_t结构体内(有多少个分类即有多少个category_t结构体) category分类信息如何添加到类信息中的(底层实现的流程) { 1.runtime运行时即将category_t结构体信息都整合到一起, 阅读全文
posted @ 2020-08-05 17:06 银榇 阅读(206) 评论(0) 推荐(0)
摘要: 思考:setValue:forKey:的原理(赋值) 当我们调用setValue:forKey时其底层实现原理 { 1.按照setKey,_setKey顺利查找方法,执行方法 2.若未找到方法,即调用accessInstanceVariablesDirectly 3.按照_key,_isKey,ke 阅读全文
posted @ 2020-08-05 16:52 银榇 阅读(241) 评论(0) 推荐(0)
摘要: 思考:iOS用什么什么方式实现对一个对象的KVO?(KVO底层实现原理) KVO实现流程: 1.runtime的api会动态生成一个全新的子类,将instance的isa指向其全新的子类 2.当我们动态修改instance的对象时,会调用Foundation的NSSetxxxxValueAndNot 阅读全文
posted @ 2020-08-05 16:44 银榇 阅读(116) 评论(0) 推荐(0)
摘要: 总结 instance的isa指向class(类对象) class的isa指向meta-calss(元类对象) meta-calss的isa指向其基类meta-class class类对象的superClass指向其父类,最终指向NSObject meta-class元类对象的superClass指 阅读全文
posted @ 2020-08-05 16:31 银榇 阅读(213) 评论(0) 推荐(0)
摘要: instance对象(实例对象):通过类alloc出来的对象,每次调用alloc都会产生新的instance对象 这是不同的两个对象,分别占用两个不同的内存。 instance对象{ isa, 成员变量值 } class对象(类对象): class类对象{ isa, superClass, 对象方法 阅读全文
posted @ 2020-08-05 16:20 银榇 阅读(152) 评论(0) 推荐(0)
摘要: 思考:一个OC对象在内存中是如何布局的?NSObject的底层实现? Objective-C的对象、类主要是基于C/C++的结构体实现的。 其底层实现如下: 思考:那一个NSObject占用多少内存? 我们可以通过runtime内置api来获取: #import <objc/runtime.h> c 阅读全文
posted @ 2020-08-05 11:25 银榇 阅读(57) 评论(0) 推荐(0)