自己做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
网友评论