iOS - NSInvocation的使用

1、簡介

  • 在 iOS中能夠直接調用某個對象的消息方式有兩種:
    • 一種是 performSelector:withObject;
    • 再一種就是 NSInvocation。
  • 第一種方式比較簡單,能完成簡單的調用。可是對於 >2 個的參數或者有返回值的處理,那就須要作些額外工做才能搞定。那麼在這種狀況下,咱們就可使用NSInvocation來進行這些相對複雜的操做。

2、使用方式

  • 代碼:
    - (void)viewDidLoad {
      [super viewDidLoad];
      //NSInvocation;用來包裝方法和對應的對象,它能夠存儲方法的名稱,對應的對象,對應的參數,
      /*
       NSMethodSignature:簽名:再建立NSMethodSignature的時候,必須傳遞一個簽名對象,簽名對象的做用:用於獲取參數的個數和方法的返回值
       */
      //建立簽名對象的時候不是使用NSMethodSignature這個類建立,而是方法屬於誰就用誰來建立
      NSMethodSignature*signature = [ViewController instanceMethodSignatureForSelector:@selector(sendMessageWithNumber:WithContent:)];
      //一、建立NSInvocation對象
      NSInvocation*invocation = [NSInvocation invocationWithMethodSignature:signature];
      invocation.target = self;
      //invocation中的方法必須和簽名中的方法一致。
      invocation.selector = @selector(sendMessageWithNumber:WithContent:);
      /*第一個參數:須要給指定方法傳遞的值
             第一個參數須要接收一個指針,也就是傳遞值的時候須要傳遞地址*/
      //第二個參數:須要給指定方法的第幾個參數傳值
      NSString*number = @"1111";
      //注意:設置參數的索引時不能從0開始,由於0已經被self佔用,1已經被_cmd佔用
      [invocation setArgument:&number atIndex:2];
      NSString*number2 = @"啊啊啊";
      [invocation setArgument:&number2 atIndex:3];
      //二、調用NSInvocation對象的invoke方法
      //只要調用invocation的invoke方法,就表明須要執行NSInvocation對象中制定對象的指定方法,而且傳遞指定的參數
      [invocation invoke];
    }
    - (void)sendMessageWithNumber:(NSString*)number WithContent:(NSString*)content{
      NSLog(@"電話號%@,內容%@",number,content);
    }

3、封裝

  • 這裏對 NSInvocation 進行了封裝,若是想使用,直接下載便可。



做者:Mitchell
連接:http://www.jianshu.com/p/da96980648b6
來源:簡書
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。git

相關文章
相關標籤/搜索