美文网首页iOS底层
iOS类与方法底层探析(四)-方法调用RunTime的具体应用

iOS类与方法底层探析(四)-方法调用RunTime的具体应用

作者: GitArtOS | 来源:发表于2019-12-14 20:19 被阅读0次

    RunTime的具体应用:

    1. 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)
    2. 给分类添加属性
    3. KVC
    4. 消息转发机制
    5. 动态交换方法的实现
    6. 手动实现多继承(oc本身是不支持多继承的)
    7. aspect 切面编程
    0. 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)

    Method Swizzling是改变一个已存在的selector的实现的技术。可以使用它来在Runtime通过修改类的分发表中selector对应的函数,来修改selector的实现。
    我们常用Method Swizzling来将系统的方法换为我们自定义的方法,给系统方法添加一些需要的功能,来实现某些需求。例如,跟踪程序每个ViewController展示给用户的次数,可以通过Method Swizzling替换ViewDidAppear初始方法。再例如更换全局UILabel默认字体,可以通过Method Swizzling替换UILabel初始方法来修改等。

    1.给分类添加属性 AssociatedObject
    void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 
    
    object:需要设置关联对象的对象
    key:关联对象的key,推荐使用selector
    value:关联对象的值,id类型
    policy:关联对象的策略,属性可以根据定义在枚举类型objc_AssociationPolicy上的行为被关联在对象上。类似于@property创建时设置的关键字。
    objc_getAssociatedObject
    获取关联对象
    
    
    id objc_getAssociatedObject(id object, const void *key)
    
    objc_removeAssociatedObjects
    移除某个对象的所有关联对象,此方法不常用。
    

    通过提供的方法我们就可以对存在的类在拓展中添加自定义的属性了。

    6. KVC

    相关文章

      网友评论

        本文标题:iOS类与方法底层探析(四)-方法调用RunTime的具体应用

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