1、调用 performSelector:withObject;
根据约定的url,进行截取字符串,再次转换成selector,然后指直接调用
performSelector:withObject;
适用于参数比较少,没有返回值,较为简单的存在
2、调用NSInvocation
创建一个MethodSignature,签名中保存了方法的名称,参数和返回值
由方法的所有者 来调用该方法 就比如这个viewController,里面的方法就是 run:eat:
NSMethodSignature *signature = [ViewController instanceMethodSignatureForSelector:@selector(run:andEat:)];
通过MethodSignature来创建一个NSInvocation
NSInvocation中保存了方法所属于的对象|方法名称|参数|返回值等等
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = self;
invocation.selector = @selector(run:andEat:);
NSString *run = @"1000米";
NSString *eat = @"家常菜";
[invocation setArgument:&run atIndex:2];
[invocation setArgument:&eat atIndex:3];
[invocation invoke];
//自定义参数索引是从2开始的 而且名称要一一对应
网友评论