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];




阅读更多
文章标签: ios ios开发 手机
个人分类: 文本
上一篇NSRooLoop 浅析
下一篇NSRuntime
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭