IOS NSInvocation用法

來源:互聯網
上載者:User

 

摘要:
在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 {

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.