objc_setAssociatedObject 与 objc_

作者: Levan_li | 来源:发表于2016-06-16 16:52 被阅读445次

    在一篇简书中看到作者使用了objc_setAssociatedObject来为button添加响应block ,所以摘出来研究一下。

    首先介绍一下objc_setAssociatedObject这个方法,
    这个方法是Objective-C的运行时函数,用来把一个对象与另一个对象进行关联。
    既然说了它是运行时函数,用到它的地方就要:

    //#import <objc/runtime.h>头文件 这个不用解释了吧.

    objc_setAssociatedObject一共需要四个参数,分别是源对象,关键字,关联的对象和一个关联策略
    解释一下

    源对象和关联对象就是需要进行关联的两个对象,而 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字;关联策略呢,是个枚举,用来表示两个对象的关联程度,具体效果大家自己可以实验一下。

    而objc_getAssociatedObject是和objc_setAssociatedObject配套使用的,它是获取相关联的对象时使用的,
    objc_getAssociatedObject两个参数源对象于关键字,注意关键字唯一且一致。

    就拿上面那个兄弟的button举个例子: 分别是.h与.m以及使用


    屏幕快照 2016-06-16 下午4.41.21.png 屏幕快照 2016-06-16 下午4.41.11.png 屏幕快照 2016-06-16 下午4.42.52.png

    这样大家就可以很好的理解和使用了,下面是提供代码兄弟的简书地址,大家有兴趣研究的,可以去看一下哦,谢谢大家的支持!

    http://www.jianshu.com/users/83b2eba88a0d/latest_articles

    相关文章

      网友评论

      • FengxinLi:请问下楼主 我那二个方法的第二个参数 -(CGFloat)gifDuration
        {
        return [objc_getAssociatedObject(self, _cmd) floatValue];
        }

        -(void)setGifDuration:(CGFloat)gifDuration
        {
        objc_setAssociatedObject(self, @selector(gifDuration), @(gifDuration), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        }
        这个代码里面 @selector(gifDuration) 和 _cmd 是也一样的为什么写成不一样呢?
      • dongwenbo:能把completion block直接绑定button上吗
      • 患了失忆症的妮小小:解释的不错,简单易懂!

      本文标题:objc_setAssociatedObject 与 objc_

      本文链接:https://www.haomeiwen.com/subject/kobmdttx.html