在利用NSInvocation对方法进行包装时遇到了一点小坑。我们平时再做开发时可以利用NSInvocation对象对我们的方法进行一次包装回调。
<span style="font-size:18px;">//方法签名(方法的描述)
NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:selector];</span><span style="font-size:18px;">//利用一个NSInvocation对象包装一次方法调用(方法调用者、方法名、方法的参数、方法返回值)
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = self;//回调对象
invocation.selector = selector;//回调方法</span>
重点是在对NSInvocation对象在进行参数设置时遇到了大坑。NSInvocation对象的setArgument: atIndex: 方法在设置参数是atIndex的0和1已经被系统占用所以我们最多只能从2开始指定包装方法的参数值和对应的参数索引。[invocation setArgument:&object atIndex:i + 2];
//调用方法
[invocation invoke];如果包装发方法有返回值可以在方法签名中获取。可以更具signature.methodReturnLength返回值的长度来确定包装方法返回值的类型。也可以使用signature.methodReturnType来获取包装方法的放回类型。
获取返回值:[invocation getReturnValue:&returnValue];
本文深入探讨了使用 NSInvocation 对方法进行包装时遇到的问题,特别是如何正确设置方法参数及获取返回值的方法。
30

被折叠的 条评论
为什么被折叠?



