美文网首页
Objective-C:Category实现一个weak属性的实

Objective-C:Category实现一个weak属性的实

作者: echo海猫 | 来源:发表于2023-04-05 15:54 被阅读0次

    Objective-C的分类无法直接添加实例变量,但我们可以利用关联对象(AssociatedObject)给分类添加属性。为了避免循环引用而需要使用weak修饰符,可以使用OBJC_ASSOCIATION_ASSIGN,OBJC_ASSOCIATION_RETAIN_NONATOMIC等关联对象的内存管理策略。以下是示例代码:

    #import <objc/runtime.h>
    
    static char associatedObjectKey;
    
    @interface NSObject (MyCategory)
    
    @property (nonatomic, weak) id myAssociatedObject;
    
    @end
    
    @implementation NSObject (MyCategory)
    
    - (id)myAssociatedObject {
        return objc_getAssociatedObject(self, &associatedObjectKey);
    }
    
    - (void)setMyAssociatedObject:(id)object {
        objc_setAssociatedObject(self, &associatedObjectKey, object, OBJC_ASSOCIATION_ASSIGN);
    }
    
    @end
    

    在这个示例代码中,我们使用关联对象给NSObject分类添加了一个名为myAssociatedObject的属性,它是一个弱引用。我们首先定义一个静态变量associatedObjectKey作为关联对象的key。

    使用objc_getAssociatedObject函数获取对象的关联对象值,使用objc_setAssociatedObject函数设置对象的关联对象值。

    在单例实现中,我们可以使用这个关联对象weak属性来存储单例对象,以防止循环引用。

    相关文章

      网友评论

          本文标题:Objective-C:Category实现一个weak属性的实

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