NSInvocation的使用:
//NSInvocation;用來包裝方法和對應(yīng)的對象,它可以存儲方法的名稱,對應(yīng)的對象,對應(yīng)的參數(shù),
/*
NSMethodSignature:簽名:再創(chuàng)建NSMethodSignature的時候,必須傳遞一個簽名對象,簽名對象的作用:用于獲取參數(shù)的個數(shù)和方法的返回值
*/
//創(chuàng)建簽名對象的時候不是使用NSMethodSignature這個類創(chuàng)建,而是方法屬于誰就用誰來創(chuàng)建
NSMethodSignature*signature = [ViewController instanceMethodSignatureForSelector:@selector(sendMessageWithNumber:WithContent:)];
//1、創(chuàng)建NSInvocation對象
NSInvocation*invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = self;// 在invoke之前必須設(shè)置1
//invocation中的方法必須和簽名中的方法一致。
invocation.selector = @selector(sendMessageWithNumber:WithContent:);//在invoke之前必須設(shè)置1
/*第一個參數(shù):需要給指定方法傳遞的值
第一個參數(shù)需要接收一個指針,也就是傳遞值的時候需要傳遞地址*/
//第二個參數(shù):需要給指定方法的第幾個參數(shù)傳值
NSString*number = @"1111";
//注意:設(shè)置參數(shù)的索引時不能從0開始,因為0已經(jīng)被self占用,1已經(jīng)被_cmd占用
[invocation setArgument:&number atIndex:2];
NSString*number2 = @"啊啊啊";
[invocation setArgument:&number2 atIndex:3];
//2、調(diào)用NSInvocation對象的invoke方法
//只要調(diào)用invocation的invoke方法,就代表需要執(zhí)行NSInvocation對象中制定對象的指定方法,并且傳遞指定的參數(shù)
[invocation invoke];
個人理解:
nsinvocation類似于Java的反射機制,能讓你獲取到該對象的屬性和方法,還有返回值等東西,屌的是還能設(shè)置??偟膩碚f就是:隨便大爺你怎么玩,但是別玩出火。