_cmd在Objective-C的方法中表示當前方法的selector,正如同self表示當前方法調(diào)用的對象實例。
基本用法
//比如需要打印當前被調(diào)用的方法,可以在一個方法中添加:
NSLog(@"%@ call",NSStringFromSelector(_cmd));
還有一種用法是在runtime的時候,比如在某個分類方法里為對象動態(tài)添加屬性,由于_cmd是在編譯時候(compile-time)就已經(jīng)確定的值,所以可以直接使用
@implementationUICollectionView (CollectionDataDelegateAdditions)
- (MVVMCollectionDataDelegate*)collectionHander
{
? ? ? return ?objc_getAssociatedObject(self,_cmd);
}
- (void)setCollectionHander:(MVVMCollectionDataDelegate*)collectionHander
{
? ? ? ? if(collectionHander) {
? ? ? ? ? ? ? ? ?[collectionHander ? handleCollectionViewDatasourceAndDelegate:self];
? ? ? ?}
? ? ? ?objc_setAssociatedObject(self,@selector(collectionHander), collectionHander,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end