最近有人问NSInvocation怎么用,于是写了个NSInvocation的小例子
2011-08-15 23:25
281 查看
直接上代码
main.h
MyClass.h
MyClass.m
这里说明一下[myInvocation setArgument: &myString atIndex: 2];为什么index从2开始
文档中的说明
Indices 0 and 1 indicate the hidden arguments self and _cmd, respectively; you should set these values directly with the setTarget: and setSelector: methods. Use indices 2 and greater for the arguments normally passed in a message.意思就是0和1是隐藏参数,而这两个参数是要在setTarget和setSelector设置的,所以我们调用方法中的参数就要从2开始了,如果有多个参数,那么就依次递增,ok,就写这么多
main.h
#import <Foundation/Foundation.h> #import "MyClass.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; MyClass *myClass = [[MyClass alloc] init]; NSString *myString = @"My string"; //普通调用 NSString *normalInvokeString = [myClass appendMyString:myString]; NSLog(@"The normal invoke string is: %@", normalInvokeString); //NSInvocation调用 SEL mySelector = @selector(appendMyString:); NSMethodSignature * sig = [[myClass class] instanceMethodSignatureForSelector: mySelector]; NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature: sig]; [myInvocation setTarget: myClass]; [myInvocation setSelector: mySelector]; [myInvocation setArgument: &myString atIndex: 2]; NSString * result = nil; [myInvocation retainArguments]; [myInvocation invoke]; [myInvocation getReturnValue: &result]; NSLog(@"The NSInvocation invoke string is: %@", result); [myClass release]; [pool drain]; return 0; }
MyClass.h
#import <Foundation/Foundation.h> @interface MyClass : NSObject { } - (NSString *)appendMyString:(NSString *)string; @end
MyClass.m
#import "MyClass.h" @implementation MyClass - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } - (NSString *)appendMyString:(NSString *)string { NSString *mString = [NSString stringWithFormat:@"%@ after append method", string]; return mString; } - (void)dealloc { [super dealloc]; } @end
这里说明一下[myInvocation setArgument: &myString atIndex: 2];为什么index从2开始
文档中的说明
Indices 0 and 1 indicate the hidden arguments self and _cmd, respectively; you should set these values directly with the setTarget: and setSelector: methods. Use indices 2 and greater for the arguments normally passed in a message.意思就是0和1是隐藏参数,而这两个参数是要在setTarget和setSelector设置的,所以我们调用方法中的参数就要从2开始了,如果有多个参数,那么就依次递增,ok,就写这么多
相关文章推荐
- 最近有人问NSInvocation怎么用,于是写了个NSInvocation的小例子
- 前两天有人问怎么取得一个目录下的文件,下面就是例子
- 最近看了点java对excel表的操作,没事写了个例子练习了一下
- 最近忠于编程之美想问一问怎么个情况
- 最近项目中有遇到报表数据入库的情况,数据量说大不大,说小又赖得自己手动敲!于是自己动手写了一个入库的,下面直接上代码,如有同样的,请联系我删除此文
- iOS Runtime应用小例子 不引入类怎么创建这个类的对象和执行类的方法
- 最近搭建HBase集群时遇到了一个问题,快把我逼疯啦,请各位大神帮我看看该怎么改啊!!!!!
- 最近用htmlunit做网络爬虫 遇到拿不到初始化js加载的数据的问题 最近解决了 写个简单的例子
- java语言解析json以后加入到listlist集合中,用代码应该怎么实现?可以举个例子吗
- NSInvocation 的使用小例子
- 有人找你一夜晴,你会怎么办?
- win7 开始 菜单 自定义 要显示的最近打开过的程序的数目 是灰色的 不可以更改 怎么解决?
- 最近有人在网上骂柠檬
- 看了老赵快速反射顺便提到了一个DynamicUtilites反射工具,我就举个小例子说明下怎么使用它
- IOS苹果群控系统怎么开发?有木有人搞过
- Office2016无法显示最近使用的文档怎么办
- 最近一直有人留言或发邮件询问我的新书何时出版,在此谢谢各位的关注,并向大家说明一下新书出版的进度:
- 微信上最近奥运会很火很炫的广告是怎么实现的
- java__晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的。于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分。
- 有人研究过凤之焚的MimeFilter例子吗 或者熟悉网页内容过滤技术的请进。MimeFilter Bu