NSInvocation個人理解

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就是:隨便大爺你怎么玩,但是別玩出火。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容