NSInvocation
本质上是把selector转化成一个对象,相对于performerselector,可以支持多参数,可以处理返回值。
NSInvocation用法
class中添加一个方法
利用block构造
//2 用block实现setter方法
id setblock = ^(id self,id value, id value2){
// do something
};
//3. 将block的实现转化为IMP
IMP imp = imp_implementationWithBlock(setblock);
//4. 用name拼接出setter方法
NSString *selString = [NSString stringWithFormat:@"setFood:andWater:"];
//5. 将setter方法加入到class中
BOOL result = class_addMethod(self, NSSelectorFromString(selString), imp, "v@:@@");
利用OC函数
字节输入函数名
class_addMethod([self class], sel, class_getMethodImplementation(self, @selector(startEngine:)), "s@:@");
利用C函数
Method, Sel 与 Imp
Method, Sel 与 Imp
有参调用 ((void()(id,SEL,NSString))imp)(a,selector,@"pcl");
无参调用 imp()