美文网首页
Runtime运行时三:并联对象

Runtime运行时三:并联对象

作者: Carson_Zhu | 来源:发表于2018-02-03 01:17 被阅读5次

    并联对象的理解

    关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上

    举个例子:
    小明是人类的一个对象,旺财是狗类的一个对象,小明用一条狗链牵着旺财,小明和旺财就是并联起来的,当然小明也可以牵多个狗。

    应用场景

    给类别添加属性

    @interface UIButton (AssociatedObject)
    @property (nonatomic, strong) NSDictionary *userInfo;
    @end
    

    自己手动生成setter和getter方法

    @implementation UIButton (AssociatedObject)
    @dynamic userInfo;
    

    方法

    首先需要一条链子

    static const void *keyID = &keyID;
    

    然后实现settergetter方法

    - (void)setUserInfo:(NSDictionary *)userInfo {
        objc_setAssociatedObject(self, keyID, userInfo, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (NSDictionary *)userInfo {
        return objc_getAssociatedObject(self, keyID);
    }
    

    参数说明

    id object:被关联的对象(如xiaoming)
    const void *key:关联的key,要求唯一
    id value:关联的对象(如dog)
    objc_AssociationPolicy policy:内存管理的策略
    

    objc_AssociationPolicy policyenum值有:

    OBJC_ASSOCIATION_ASSIGN = 0,          
    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, 
    OBJC_ASSOCIATION_COPY_NONATOMIC = 3,  
    OBJC_ASSOCIATION_RETAIN = 01401,       
    OBJC_ASSOCIATION_COPY = 01403
    

    当对象被释放时,会根据这个策略来决定是否释放关联的对象,当策略是RETAIN、COPY时,会释放release关联的对象,当是ASSIGN,将不会释放。

    相关文章

      网友评论

          本文标题:Runtime运行时三:并联对象

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