NSInvocation 注意事项


       在利用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];




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值