iOS RunTime

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()

Block

Block解析

你可能感兴趣的:(iOS RunTime)