ObjC中_cmd的用法

_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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,449评论 0 9
  • _cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例。...
    botherbox阅读 19,429评论 11 65
  • Runtime是一套比较底层的纯C语言API,包含了很多底层的C语言API。在我们平时编写的OC代码中,程序运行时...
    这个年纪的情愫丶阅读 395评论 5 3
  • 你的未婚妻是不是你心仪的女神?买房是不是越来越难,房团惠小编认为应该看到一个方向,那就是一线城市一是买不起,二是供...
    胖乎乎的胖子阅读 875评论 0 0
  • 读完《了不起的盖茨比》,停下来写一点感受,心中某名的情绪,转换成文字的话可能会舒坦一些。看不太明白,却有种淡淡的忧...
    Jennymer阅读 313评论 0 0