美文网首页
iOS开发,RunTime总结

iOS开发,RunTime总结

作者: iOS鑫 | 来源:发表于2021-02-26 13:33 被阅读0次

    基础路径图:

    image

    在学习 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异常加载的展位图
    • 全局修改 UINavigationBarbackButtonItem

    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">问题: 给类添加一个属性后,在类结构体里哪些元素会发生变化********

    总结

    好了, 终于到尾声了, 希望大家可以在我的文章里学到知识, 早日迎娶白富美, 走上人生巅峰

    感谢支持!文章持续更新 点赞再看,养成习惯,更多请关注!

    相关文章

      网友评论

          本文标题:iOS开发,RunTime总结

          本文链接:https://www.haomeiwen.com/subject/odrufltx.html