_cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例。
基本用法
//比如需要打印当前被调用的方法,可以在一个方法中添加:
NSLog(@"%@ call",NSStringFromSelector(_cmd));
还有一种用法是在runtime的时候,比如在某个分类方法里为对象动态添加属性,由于_cmd是在编译时候(compile-time)就已经确定的值,所以可以直接使用
@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