當我從C風格函數的主體訪問它時,_cmd
變量的值是多少?c函數內部的_cmd值
它僅在選擇器(Objective-C)方法內部定義嗎?
P.S.
這個問題可能起源於我對_cmd
的不瞭解。 如果有人向我提供了一個很好的解釋來源,我將不勝感激。
當我從C風格函數的主體訪問它時,_cmd
變量的值是多少?c函數內部的_cmd值
它僅在選擇器(Objective-C)方法內部定義嗎?
P.S.
這個問題可能起源於我對_cmd
的不瞭解。 如果有人向我提供了一個很好的解釋來源,我將不勝感激。
這僅適用於Objective-C方法,因此您無法訪問它。傳遞給所有Objective-C方法的前兩個參數是self
和_cmd
,然後是實際方法採用的任何其他參數。由於self
和_cmd
都不會傳遞給常規C函數,因此您無法訪問它們。
這兩個變量都沒有什麼特別的魔力。
_cmd
函數的主要用途是獲取調用它的方法名稱。
在下面寫了_cmd和其他一些函數的用法。
NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__);
代替以上線你也可以使用PrettyFunction
NSLog(@"%s", __PRETTY_FUNCTION__);
敬請期待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.
作爲參考:[目的-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
爲了更加清楚,'_cmd'是一個'SEL' - Objective-C方法的方法選擇器。 「方法選擇器是已用Objective-C運行時註冊(或」映射「)的C字符串。」 – 2013-04-23 20:29:35