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

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属性来存储单例对象,以防止循环引用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容