我想在objective-c中调用一个函数。问题是 - 我知道只有在运行时需要调整的函数。现在代码中的不同方法将有不同的返回类型,输入参数等。
如何编写(通用)代码,如果给定它所属的函数和类的名称,我可以创建一个块,然后使用imp_implementationWithBlock创建IMP,然后使用这个新创建的IMP混合原始方法
答案 0 :(得分:1)
您可以使用NSSelectorFromString()
动态查找选择器名称,然后执行调配。有许多助手,所以我不需要重复精确的调配逻辑。例如。如果您使用Aspects,代码可能如下所示:
[_singleTapGesture aspect_hookSelector:NSSelectorFromString(@"setState:") withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
NSLog(@"%@: %@", aspectInfo.instance, aspectInfo.arguments);
} error:NULL];
对于运行时调整,你应该确保你知道你正在做什么,如果选择器不存在,你应该优雅地失败。