2010-12-11 90 views
15

當我從C風格函數的主體訪問它時,_cmd變量的值是多少?c函數內部的_cmd值

它僅在選擇器(Objective-C)方法內部定義嗎?

P.S.

這個問題可能起源於我對_cmd的不瞭解。 如果有人向我提供了一個很好的解釋來源,我將不勝感激。

回答

17

這僅適用於Objective-C方法,因此您無法訪問它。傳遞給所有Objective-C方法的前兩個參數是self_cmd,然後是實際方法採用的任何其他參數。由於self_cmd都不會傳遞給常規C函數,因此您無法訪問它們。

這兩個變量都沒有什麼特別的魔力。

+3

作爲參考:[目的-C的方法](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/參考/的reference.html)。請注意,任何將'id'和'SEL'作爲前兩個參數的C函數都可以用作方法實現。同樣,任何方法實現都是一個C函數,它將前兩個參數用作「id」和「SEL」。 – outis 2010-12-18 20:08:05

+7

爲了更加清楚,'_cmd'是一個'SEL' - Objective-C方法的方法選擇器。 「方法選擇器是已用Objective-C運行時註冊(或」映射「)的C字符串。」 – 2013-04-23 20:29:35

18

_cmd函數的主要用途是獲取調用它的方法名稱。

在下面寫了_cmd和其他一些函數的用法。

NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__); 

代替以上線你也可以使用PrettyFunction

NSLog(@"%s", __PRETTY_FUNCTION__); 
0

敬請期待here作進一步的解釋。

func class_addMethod(_ cls: AnyClass!, 
        _ name: Selector!, 
        _ imp: IMP!, 
        _ types: UnsafePointer<Int8>!) -> Bool 

小鬼

A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd.