我想在objective-c中刷新一个函数。问题是——我知道只有在运行时才需要刷新的函数。现在,代码中的不同方法将有不同的返回类型、输入参数等。
我应该如何编写一个(通用)代码,如果给定它所属的函数和类的名称,我可以创建一个块,然后使用imp_implementationWithBlock创建imp,然后用这个新创建的imp刷新原始方法。
您可以使用NSSelectorFromString()
动态查找选择器名称,然后执行swizzling。有很多助手,所以我不需要重复确切的嗖嗖逻辑。例如,如果您使用Aspects,代码可能如下所示:
[_singleTapGesture aspect_hookSelector:NSSelectorFromString(@"setState:") withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
NSLog(@"%@: %@", aspectInfo.instance, aspectInfo.arguments);
} error:NULL];
对于运行时swizzling,您应该确保您知道自己在做什么,并且在选择器不存在的情况下正常失败。