在Objective C中实现动态方法调用有多种方式,其中一种比较常用的是通过Runtime库中的函数来实现。例如,可以使用以下函数来实现根据方法名字符串执行对应的方法:
// 获取方法签名
NSMethodSignature *methodSignature = [self methodSignatureForSelector:NSSelectorFromString(methodName)];
if (methodSignature) {
// 创建NSInvocation对象
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
// 设置目标对象
[invocation setTarget:self];
// 设置方法选择器
[invocation setSelector:NSSelectorFromString(methodName)];
// 设置参数
[invocation setArgument:¶m1 atIndex:2];
[invocation setArgument:¶m2 atIndex:3];
// 执行方法调用
[invocation invoke];
}
这样就可以实现动态方法调用,并且可以支持传递基本数据类型参数。需要注意的是,由于这种方式是动态创建方法签名和NSInvocation对象,所以比较消耗性能,应尽量减少使用。