美文网首页
关联对象(给分类添加成员变量)

关联对象(给分类添加成员变量)

作者: 大鹅ne | 来源:发表于2020-04-15 22:46 被阅读0次

    🌟默认情况下,因为分类底层结构的限制,不能田间成员变量到分类中。但可以通过关联对象来间接实现
    🌟关联对象提供了以下api
    添加关联对象

    void
    objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
                             id _Nullable value, objc_AssociationPolicy policy)
    

    获得关联对象

    id _Nullable
    objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
    

    移除所有的关联对象

    void
    objc_removeAssociatedObjects(id _Nonnull object)
    

    🌟key的常见用法

    static const void * MyKey = & MyKey;
    objc_setAssociatedObject(obj, MyKey,
                             value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    objc_getAssociatedObject(obj, MyKey)
    
    static const char MyKey;
    objc_setAssociatedObject(obj,& MyKey,
                             value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    objc_getAssociatedObject(obj, &MyKey)
    
    

    使用属性名作为key

    objc_setAssociatedObject(obj,@"property",
                             value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    objc_getAssociatedObject(obj, @"property")
    
    

    使用get方法的@selecot作为key

    objc_setAssociatedObject(obj,@selector(getter),
                             value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    objc_getAssociatedObject(obj, @selector(getter))
    
    
    Screen Shot 2020-04-15 at 10.45.26 PM.png

    相关文章

      网友评论

          本文标题:关联对象(给分类添加成员变量)

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