美文网首页
Runtime的应用

Runtime的应用

作者: 九月oc | 来源:发表于2020-11-17 10:04 被阅读0次

    Runtime的基本属性和消息转发机制已经介绍过了,下面来了解一些Runtime提供的api在实际项目中的应用。

    Runtime在项目中的实际应用主要包括几个方面

    一、使用runtime交换方法。

    在实际操作中我们可以使用class_getClassMethod方法来获得当前方法的Method 并且使用method_exchangeImplemetations()方法来实现方法的交换。

    二、动态添加方法

    class_addMethod(self,@selector(eat),eat,"v@:")

    三、给分类添加属性

    给分类添加属性需要在interface中先声明对应的属性

    重写对象的set和get方法 注意在写set方法的时候要注意对应的参数类型(strong 和 assig)对应的参数是不一样的

    objc_getAssociatedObject(self.key) 获得对应的方法

    objc_setAssociatedObject( ) 添加对应的方法

    四、KVO实现

    KVO的机制依赖于runtime框架,当观察某对象时候,runtime会动态的创建一个子类, 并且重写了这个子类的setter方法 setter方法负责之后观察改变属性的状况。 生成的子类并不是完全的子类 , 有一些父类的方法会被重写 例如 调用子类的class方法的时候输出的还是父类的类名。

     五、实现NSCoding的子宫归档和自动解档

    用runtime提供的函数遍历model自身所有属性,并对属性进行encode和decode操作 

    要注意CopyIvarsList 和CopyIvarsProperty的区别 ,如果只有Property 那么只copy声明好的变量 如果是copylist 那么会copy所有包括在大括号中声明的所有变量

    六、热更新

    使用objc_removeAssociatedObjects可以断开所有的关联。

    但是通常情况下不建议使用,

    因为它会断开所有已经写好的的关联属性。想要断开关联推荐使用objc_setAssociatedObject,将关联对象传入 nil就可以了。

    相关文章

      网友评论

          本文标题:Runtime的应用

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