- (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); }
做者:Mitchell
連接:http://www.jianshu.com/p/da96980648b6
來源:簡書
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。git