美文网首页
关于Runtime中的动态添加方法以及实现消息的转发

关于Runtime中的动态添加方法以及实现消息的转发

作者: 飞雪飘零丶夜孤城 | 来源:发表于2017-10-12 20:20 被阅读0次

    自己做iOS开发2年,第一次发表博客。

    1、runtime实现为类动态添加方法

    首先为了编译通过使用performSelector来调用car类中的run:方法

    然而run:方法在car类中并没有实现,这时运行Xcode会crash,怎么办呢!runtime来大显身手了,为car动态添加方法并实现

    首先car类包含<runtime.h>

    如果car类没有实现run:方法那么将调用car的类方法+(void)resolveInstanceMethod:方法来覆盖这个方法

    if(一致)用class_addMethod这个c语言函数创建一个方法,第一个参数就是你要添加方法的那个类的car类对象,第二个参数就是传递过来的sel,第三个是一个函数名,第四个参数是上一个参数--函数的参数要数,第一个v代表这个函数的返回值为void,如果返回对象类型就是@,后面的@:@分别代表后续的三个参数,其中Sel类型的用:表示,具体请参考苹果开发文档。

    到此runtime为类动态添加方法完成

    2、消息的转发

    假如我把class_addMethod注释掉,运行Xcode立马crash,这里就用到了消息转发,新建一cat个类在该类里面实现run:()

    然后回到car类.m文件中

    实现两个方法

    这时在运行Xcode 不会crash 然后再cat类中的run:()方法中打印  输出结果  这样就把消息抓发出去了,到此结束个人在网上面学习的,若遇到相同的 纯属巧合,后面我会继续学习 方法交换  属性添加  以及更深层的runtime

    相关文章

      网友评论

          本文标题:关于Runtime中的动态添加方法以及实现消息的转发

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