基础路径图:
在学习 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-dr
aft-type="t
able" data-size="normal"
data-row-style="normal">问题: o
bjc在向一个对象发送消息时, 发生了什么?
r>ody><
/table>**b**le dat**a**
-draft-node="block" d**a**ta-**d**
raf**t**-type="table"** data-size="normal" dat
a-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-dra
ft-type="table" data-
size="normal"
data-row-s
tyle="normal">body>
问题: run
time如何实现weak变量
的自动置nil?r>>**b**le data-draft-node="block**" d
ata-draft-type="table" dat
a-size="normal" data-row-style="normal">问题: 给类添加一个属性后,在类结构体里哪些元素会发生变化**
******
总结
好了, 终于到尾声了, 希望大家可以在我的文章里学到知识, 早日迎娶白富美, 走上人生巅峰
感谢支持!文章持续更新 点赞再看,养成习惯,更多请关注!