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

2023-04-05  本文已影响0人  echo海猫

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

上一篇下一篇

猜你喜欢

热点阅读