美文网首页
关联对象(Objective-C Associated Obje

关联对象(Objective-C Associated Obje

作者: 一个半吊子工程师 | 来源:发表于2023-04-25 17:04 被阅读0次

    在iOS开发中,我们经常使用到category,使用category可以给类添加方法或者属性

    @interface Person (Property)
    @property(nonatomic, strong) NSString *str;
    @end
    

    在添加属性的时候,如果仅仅声明属性,编译器并不会自动生成set和get方法,此时直接使用属性进行读写会发生crash,如下:


    image.png

    此时需要通过关联对象来增加属性的set和get方法实现。

    #import "Person+Property.h"
    #import <objc/runtime.h>
    @implementation Person (Property)
    - (void)setStr:(NSString *)str
    {
        objc_setAssociatedObject(self, @selector(str), str, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    - (NSString *)str
    {
        return objc_getAssociatedObject(self, @selector(str));
    }
    @end
    

    解释:
    objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)参数解释:
    1、object:需要关联的对象
    2、key:关联key
    3、value:关联值
    4、policy:关联策略

    typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
    OBJC_ASSOCIATION_ASSIGN = 0, // 对应 assign       
    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //  对应 strong,nonatomic
    OBJC_ASSOCIATION_COPY_NONATOMIC = 3, // 对应 copy,nonatomic 
    OBJC_ASSOCIATION_RETAIN = 01401, // 对应 strong,atomic                                     
    OBJC_ASSOCIATION_COPY = 01403 // 对应 copy,atomic
    };
    

    相关文章

      网友评论

          本文标题:关联对象(Objective-C Associated Obje

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