iOS中调用一个函数,一般有三种方法
第一种:对象(类对象)直接调用

第二种:performSelector方法

performSelector方法调用的本质是使用第三种方法NSInvocation来实现方法的
performSelector方法中可传入一个活着两个参数,如果参数过多,这里没有办法传入。一般的做法是将多个参数封装成字典NSDictionary传入。但是这样的话就要多写这个封装的代码,比较麻烦。
第三种:NSInvocation调用

NSInvocation方法调用过程图中已经写的很明白了,需要注意的就是设置参数的时候setArgument方法中的两个参数
第一个参数需要传入的是对应参数的指针,第二个参数需要传入的是参数在参数列表中的index。应为在iOS中每个函数都有两个默认的参数:0--id:self 1--SEL:_cmd,所以自己添加的参数一般下标从2开始
应用
这里提一个应用,供大家参考
在做项目组件化的时候大家都要使用路由,路由中传入的类名和方法名一般都是字符串,大家通过Runtime方法获取对应的类名和方法名。而参数一般是通过拼接的方式传入,然后在路由这里将参数组合成字典。然后让对应的类调用对应的方法。
在调用方法的时候一般都要做一层封装,用NSInvocation来实现方法的调用。
网友评论