_cmd在Objective-C的方法中表示當(dāng)前方法的selector阐肤,正如同self表示當(dāng)前方法調(diào)用的對象實(shí)例。
比如需要打印當(dāng)前被調(diào)用的方法讲坎,可以在一個(gè)方法中添加:
NSLog(@"%@ call",NSStringFromSelector(_cmd));
會輸出類似
2013-01-10 11:25:46.902 TDDataViewer[855:303] applicationDidFinishLaunching: call
這樣的內(nèi)容孕惜。
SEL sel=@selector(compare:);
NSString *functionName= NSStringFromSelector(sel);
SEL anotherSel=NSSelectorFromString(方法名字的字符串);
在編譯時(shí)設(shè)置變量為SEL變量最有效的方法就是@selector()指令。然而晨炕,在某些情況下衫画,你可能需要在運(yùn)行時(shí)轉(zhuǎn)換一個(gè)字符串為一個(gè)selector。
第一行是直接在程序里面寫上方法的名字,第2行是通過sel變量獲取方法的名字瓮栗。第三行是寫上方法名字的字符串.
我們得到 SEL變量之后,可以通過下面的調(diào)用來給一個(gè)對象發(fā)送消息:
[對象 performSelector:SEL變量 withObject:參數(shù)1 withObject:參數(shù)2];
這樣的機(jī)制增加了程序的靈活性削罩,可以通過給一個(gè)方法傳遞sel參數(shù),讓這個(gè)方法動(dòng)態(tài)的執(zhí)行某一個(gè)方
法,我們也可以通過配置文件制定需要執(zhí)行的方法费奸,程序讀取配置文件之后把方法的字符串翻譯成sel變量然后給相應(yīng)的對象發(fā)送這個(gè)消息
從效率的角度上來說弥激,執(zhí)行的時(shí)候不是通過方法名字而是通過方法的ID來查找方法,由于整數(shù)的查找比匹配字符串快得多愿阐,
所以這樣可以在某種程序上提高執(zhí)行的效率