IOS学习笔记之十六:NSInvocation的理解和使用

网络上关于NSInvocation的解释都太不太容易理解,这里写下自己的解释

1.为什么要用NSInvocation?

因为PerformSelector的话只能用调用含有两个参数以下的方法,多个参数的时候就需要用NSinvocation


2.用NSInvocation的流程

1.给要调用的方法生成一个签名,用来识别要调用的是哪个方法

NSMethodSignature *signature = [NSString methodSignatureForSelector:@selector(printName:)]; 

2.生成一个NSInvocation对象,因为我们要用到这个,所以肯定首先要有一个对象,而且提前告诉它我们主要是为了执行selector

 NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];

3.设置要执行的方法的参数的类型

[invocation setTarget:[NSString class]]; 

4. 设置要执行的方法是什么,用selector得方式将两者绑定

[invocation setSelector:@selector(printName:)];

5.设置要传入的参数对象

NSString *argString = @"Bruce";

[invocation setArgument:&argString atIndex:2];

在这里尤其要注意,其中参数的传入是要加一个标记符号&的,因为主要传入的时参数的地址,而不参数的value。

6.调用方法

[invocation invoke];

7.获取返回值,如果有的话

[invocation getReturnValue:&string];


3.总结,用这么一长串的句子实际上就是一个普通的method Call,所以不到逼不得已,非得编译的时候放入方法内容的时候,而且该方法需要多余两个参数的时候,还是不要用了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值