iOS Developer闻道丶iOS(尝鲜版)

runtime实用

2017-03-13  本文已影响65人  DelegateChai

首先导入<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");
}
上一篇 下一篇

猜你喜欢

热点阅读