美文网首页
objc_setAssociatedObject和objc_ge

objc_setAssociatedObject和objc_ge

作者: 半杯故事 | 来源:发表于2017-10-26 13:24 被阅读14次
objc_setAssociatedObject(<#id  _Nonnull object#>, <#const void * _Nonnull key#>, <#id  _Nullable value#>, <#objc_AssociationPolicy policy#>)

这四个后面的参数分别表示:源对象,关键字,关联的对象和一个关联策略。
关联策略是一个枚举

OBJC_ASSOCIATION_ASSIGN = 0,      <指定一个弱引用关联的对象>

OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,<指定一个强引用关联的对象>

OBJC_ASSOCIATION_COPY_NONATOMIC = 3,  <指定相关的对象复制>

OBJC_ASSOCIATION_RETAIN = 01401,      <指定强参考>

OBJC_ASSOCIATION_COPY = 01403    <指定相关的对象复制>

objc_getAssociatedObject(<#id  _Nonnull object#>, <#const void * _Nonnull key#>)

第一个参数为源对象,第二个参数为关键字,这个方法为用来获取关联对象。

移除关联的时候调用objc_setAssociatedObject关联对象设置为nil就可以。

- (void (^)(TouchBlock))touchUpInside{
    return ^(TouchBlock block){
        //将self和block关联起来
        objc_setAssociatedObject(self, touchKey, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
        [self addTarget:self action:@selector(touchUpInside) forControlEvents: UIControlEventTouchUpInside];
        return ;
    };
}
- (void)touchUpInSide:(UIButton *)button{
    //根据关联获取block
    TouchBlock block = objc_getAssociatedObject(self, touchKey);
    if (block) {
        block();
    }
}

相关文章

网友评论

      本文标题:objc_setAssociatedObject和objc_ge

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