在 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就顯得有點有心無力了,...