关闭

NSInvocation 注意事项

标签: iosios开发手机
181人阅读 评论(0) 收藏 举报
分类:


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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9919次
    • 积分:335
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类