基础路径图:

在学习 RunTime 的基础时, 我们要搞清楚一些重要的东西, 一些专业术语:
- SEL
- id
- Class
- Method
- Ivar
- IMP
- Cache
- Property
我们可以从这些东西里获取到指定类的所有信息, 无论是公开的, 还是私有的, 全部都可以拿到, 并且操作.
PS: 但操作私有方法的时候, 注意不要用来上架, 除非你有方法让苹果审核的时候通过.
RunTime进阶
在学习 RunTime 进阶的时候, 我们就要了解更加的深入.
消息机制:
- objc_msgSend
- objc_msgSend_fpret
- objc_msgSend_stret
- objc_msgSendSuper
- objc_msgSendSuper_stret
对象关联:
- objc_setAssociatedObject()
- objc_getAssociatedObject()
- objc_removeAssociatedObjects()
对象关联的策略:
- OBJC_ASSOCIATION_ASSIGN
- OBJC_ASSOCIATION_RETAIN_NONATOMIC
- OBJC_ASSOCIATION_COPY_NONATOMIC
- OBJC_ASSOCIATION_RETAIN
- OBJC_ASSOCIATION_COPY
动态方法解析:
-
resolveInstanceMethod: -
YES, 通过class_addMethod消息得到处理, 结束 -
NO, 进入forwardingTargetForSelector -
指定响应
selector, 消息得到处理, 结束 -
不指定响应
selector -
进入
methodSignatureForSelector, 指定方法签名, 调用forwardInvovation, 通过anInvocation做处理, 消息得到处理, 结束 -
不指定方法签名, 该消息没有得到处理, 系统报错
RunTime应用
Category
- 关联对象
- 控制对象
Class
- 动态添加方法
- 动态交换方法
- 动态拦截并替换方法
- 动态给方法添加额外功能
Model
-
自动归档和解档
-
自动字典转模型
-
字典转模型(模型属性数量大于字典key数量)
-
字典转模型(模型中嵌套模型)
-
字典转模型(数组中嵌套模型)
RunTime实例开发场景
在实际开发中, 我们有一些实例场景会用到 RunTime :
- 替换
ViewController的声明周期 - 解决集合类因索引的问题崩溃的问题
- 防止按钮重复高强度点击
- 全局更换控件初始效果
- App热修复
- App异常加载的展位图
- 全局修改
UINavigationBar的backButtonItem
Runtime Method Swizzling开发实例汇总
RunTime面试题及答案
ble data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">问题: objc在向一个对象发送消息时, 发生了什么?r>ody></table>**b**le dat**a**-draft-node=“block” d**a**ta-**d**raf**t**-type="table"** data-size="normal" data-row-style="normal">ody>问题: 什么时候会报 unrecognized selector 错误? iOS 有哪些机制来避免走到这一步?**able>ble data-draft-node=“block” data-draft-type=“table” data-size=“normal” data-row-style=“normal”>body>r>问题: 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量? 为什么?tbody></table>ble data-draft-node=“block**” data-draft-type=“table” data-size="normal" data-row-style="normal">body>问题: runtime如何实现weak变量的自动置nil?r>>**b**le data-draft-node="block**" data-draft-type="table" data-size=“normal” data-row-style="normal">问题: 给类添加一个属性后,在类结构体里哪些元素会发生变化********
总结
好了, 终于到尾声了, 希望大家可以在我的文章里学到知识, 早日迎娶白富美, 走上人生巅峰
感谢支持!文章持续更新 点赞再看,养成习惯,更多请关注!

本文围绕RunTime展开,先介绍基础路径图中的专业术语,可借此获取指定类的所有信息。接着阐述RunTime进阶内容,包括消息机制、对象关联等。还说明了RunTime在Category、Class、Model方面的应用,列举了实例开发场景,最后给出面试题及答案。
1万+

被折叠的 条评论
为什么被折叠?



