NSInvocation直接呼叫某個物件的訊息

2021-07-22 22:38:30 字數 1760 閱讀 6153

在 ios中可以直接呼叫某個物件的訊息方式有兩種:

一種是performselector:withobject;

再一種就是nsinvocation。

第一種方式比較簡單,能完成簡單的呼叫。但是對於》2個的引數或者有返回值的處理,那就需要做些額外工作才能搞定。那麼在這種情況下,我們就可以使用nsinvocation來進行這些相對複雜的操作。在高階點的, block的結構體裡面也是有函式的, 函式就可以通過nsinvocation呼叫 , 比較出名的aspects框架就使用了nsinvocation呼叫block.

1、nsinvocation的作用

封裝了 方法呼叫物件、方法選擇器、引數、返回值等,可以給物件傳送乙個引數大於兩個的訊息;

2、優勢

nsinvocation,它可以設定多個引數;

3、使用方式

4.invocation**演示

-(void)invocationinstanceelse if (strcmp(sigretun, "q")==0)

}else

// 8.常用方法

nsuinteger argumentnum = sig.numberofarguments;

nslog(@"%zd",argumentnum); //引數的個數

for(int i=0;i5.常見方法及屬性

//保留引數,它會將所有引數和self 都retain 一遍

-(void)retainarguments;

//判斷引數是否存在,呼叫retainarguments之前,值為no,呼叫之後值為yes

@property(readonly)bool argumentsretained;

//引數個數

@property(readonly)nsuinteger numberofarguments;

//獲取方法的長度

@property(readonly)nsuinteger framelength;

//是否是單向

-(bool)isoneway;

//獲取方法返回值的型別

@property(readonly)const char *methodreturntype;

//獲取方法返回值的長度

@property(readonly)nsuinteger methodreturnlength;

//獲取指定下標的引數型別

-(const char*)getargumenttypearindex:(nsuinteger)idx;

//通過c字串獲得方法簽名

+(nullable methodsignature*)signaturewithobjectctype:(const char*)types;

sel selector = nsselectorfromstring(@"setstatusbarorientation:");

uideviceorientation orentation = uideviceorientationportrait;

[invocation setselector:selector];

[invocation setargument:&orentation atindex:2];

[invocation invoke];

}

NSInvocation使用示例

在 ios中可以直接呼叫 某個物件的訊息 方式有2種 第一種方式是使用nsobject類提供的performselector系列方法 還有一種方式就是使用nsinvocation進行動態執行時的訊息分發,動態的執行方法,相信大家一定經常使用nsobject類提供的performselector系列方...

NSInvocation使用示例

在 ios中可以直接呼叫 某個物件的訊息 方式有2種 第一種方式是使用nsobject類提供的performselector系列方法 還有一種方式就是使用nsinvocation進行動態執行時的訊息分發,動態的執行方法,相信大家一定經常使用nsobject類提供的performselector系列方...

NSInvocation基本用法

在 ios中可以直接呼叫某個物件的訊息方式有兩種 一種是performselector withobject 再一種就是nsinvocation。第一種方式比較簡單,能完成簡單的呼叫。但是對於 2個的引數或者有返回值的處理,那performselector withobject就顯得有點有心無力了,...