RunTime总结:

oc动态性, 运行时将代码转化为runtime的C代码数组

RunTime运行流程:函数

生成对应objc_msgSend方法 isa指针查看当前类有没有这个方法, 以后寻找父类, 每一个方法SEL(方法选择器)对应IMP(相似于一个编号,是函数指针,指向函数实现,找到内存里对应函数),  直到NSObeject, 若是找不到IMP, 会进入消息转发机制, resolveClassMethod, resolveInstanceMethod, forwardingTargetForSelector, forwardInvocation 第一个方法所属类方法动态方法解析, 第二个和第一个相似,是对应实例方法的, 第三个是备援接受者, 第四个方法是消息重定向, 真正消息转发,也是Aspects的核心操做, 若是都找不到调用doesNotRecognizeSelector:方法抛出异常加密

RunTime的实际应用指针

交换方法(黑魔法.hook,让SEL1->IMP2,SEL2->IMP1),为系统类添加自定义方法,三方Aspects 继承

①用方法交换添加保护, 如数组赋值时添加越界判断等等  ②统计页面点击数用  ③多继承  ④自动化归档(kvo)  ⑤NSTime内存泄漏(vc被释放经过消息转发找回vc)  ⑥系统类添加自定义方法, 写一些更便捷的代码,好比控件加手势,字典加加密方法,代码更简洁 内存

相关文章
相关标签/搜索