IOS学习笔记之十六:NSInvocation的理解和使用
2014-11-04 17:21
316 查看
网络上关于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,所以不到逼不得已,非得编译的时候放入方法内容的时候,而且该方法需要多余两个参数的时候,还是不要用了。
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,所以不到逼不得已,非得编译的时候放入方法内容的时候,而且该方法需要多余两个参数的时候,还是不要用了。
相关文章推荐
- iOS学习笔记(十六)――详解数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB) .
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- IOS开发学习笔记(十六)——使用地理位置及地图(上篇)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS学习笔记(十六)——数据库操作(使用FMDB) (转)
- IOS 学习笔记(二)object-c理解
- [每日学习笔记][2012.08.03]使用Java理解程序逻辑(十一)
- [每日学习笔记][2012.07.10]使用Java理解程序逻辑(五)
- IOS学习笔记32—使用Storyboard实现复杂界面
- [每日学习笔记][2012.08.02]使用Java理解程序逻辑(九)
- [每日学习笔记][2012.07.10]使用Java理解程序逻辑(三)
- ios学习笔记(六)使用UIScrollView嵌套UIView子类
- [每日学习笔记][2012.07.10]使用Java理解程序逻辑(六)