IOS NSInvocation用法

 

摘要: 在iOS中可以直接调用 某个对象的消息 方式有2中 一种是performSelector:withObject: 再一种就是NSInvocation 第一种方式比较简单,能完成简单的调用。但是对于2个的参数或者有返回值的处理,那就需要做些额外工作 ...

 


    iOS中可以直接调用某个对象的消息方式有2
   
    一种是performSelector:withObject:
   
    再一种就是NSInvocation
   
    第一种方式比较简单,能完成简单的调用。但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作

main.h

[html] view plaincopy

1.  #import <Foundation/Foundation.h>

2.  #import "MyClass.h"

3.   

4.  int main (int argc, const char * argv[])

5.  {

6.   

7.  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]  init];

8.   

9.  MyClass *myClass = [[MyClass alloc] init];

10. NSString *myString = @"My string";

11.  

12. //普通调用

13. NSString *normalInvokeString = [myClass  appendMyString:myString];

14. NSLog(@"The normal invoke string is: %@",  normalInvokeString);

15.  

16. //NSInvocation调用

17. SEL mySelector = @selector(appendMyString:);

18. NSMethodSignature * sig = [[myClass class]

19. instanceMethodSignatureForSelector: mySelector];

20.  

21. NSInvocation * myInvocation = [NSInvocation  invocationWithMethodSignature: sig];

22. [myInvocation setTarget: myClass];

23. [myInvocation setSelector: mySelector];

24.  

25. [myInvocation setArgument: &myString atIndex: 2];

26.  

27. NSString * result = nil;

28. [myInvocation retainArguments];

29. [myInvocation invoke];

30. [myInvocation getReturnValue: &result];

31. NSLog(@"The NSInvocation invoke string is: %@",  result);

32.  

33. [myClass release];

34.  

35. [pool drain];

36. return 0;

37. }


  MyClass.h

[html] view plaincopy

1.  #import <Foundation/Foundation.h>

2.   

3.   

4.  @interface MyClass : NSObject {

 

你可能感兴趣的:(IOS NSInvocation用法)