runtime实用

首先导入<objc/message.h>头文件

runtime替换方法的:

在类的+load方法中进行,因为这个东西只会调用一次。添加功能记得调用原方法(此时原方法已经被新方法替换),类方法和实例方法的替换调用的方法是不太一样的。

runtime添加方法:

一般用调用performSelecter(),在 -(Bool)ResolveInstanceMethod:(SEL)sel{} 中可以拦截到调用的方法,在这里也可以拦截到没有实现的方法(注意重写方法需要调用 [super reloveMethod]方法),添加方法add......,注意查一下官方文档,看一下写法:
比如要添加的方法:

void eat(id self,SEL _cmd){  //这是个没有参数的添加方法

}
void eat(id self,SEL _cmd,id para){}//带一个参数的添加方法
//添加
class_addMethod(self,sel,(IMP)eat,"v@:");

class_addMethod(self,sel,(IMP)eat,"v@:@");
Runtime给类或分类添加属性:

可以给分类添加一个全局静态变量,实现他的set和get方法,但是不够好。
可以用关联方法:

//添加一个name属性
-(void)setName:(NSString *)name{  
//para1:给谁关联属性,para2:关联属性的key值,para3:关联属性的策略
  objc_setAssociatedObject(self,@"name",OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)name{
objc_getAssociatedObject(self,@"name");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Runtime常见应用场景 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法) 实现给分类增...
    Amanda_Lhy阅读 261评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,855评论 0 9
  • RuntimeUseCases Runtime的一些使用案例和场景. 前话 这段时间继续学习了下Runtime.在...
    春田花花幼儿园阅读 355评论 0 1
  • 刚刚过去的2017年愚人节,社交网站Reddit发布了一个名为Place的在线游戏活动,凡是2017年3月31日前...
    应皓阅读 9,094评论 0 2
  • 最近在看Casa博客上组件化相关的一些文章,感觉收获很大。这是他的一个系列文章,有三篇继承、多态、封装。Casa博...
    西山薄凉阅读 379评论 0 0