Runtime应用1-关联对象

// UIView+DefaultColorView.h
#import "objc/runtime.h"

@interface UIView (DefaultColorView)
@property (nonatomic, strong) UIColor *defaultColor;
@property (nonatomic, copy) NSString *defaultStr;
@end
// UIView+DefaultColorView.m
#import "UIView+DefaultColorView.h"

@implementation UIView (DefaultColorView)
//@dynamic defaultColor;   作用是什么,好像写不写都行
//@dynamic defaultStr;
static char kDefaultColorKey;
static char kDefaultStrKey;

- (void)setDefaultColor:(UIColor *)defaultColor
{
    objc_setAssociatedObject(self, &kDefaultColorKey, defaultColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIColor *)defaultColor
{
    return objc_getAssociatedObject(self, &kDefaultColorKey);
}

- (void)setDefaultStr:(NSString *)defaultStr
{
    objc_setAssociatedObject(self, &kDefaultStrKey, defaultStr, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)defaultStr
{
    return objc_getAssociatedObject(self, &kDefaultStrKey);
}
@end

使用

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    v.backgroundColor = [UIColor redColor];
    v.defaultColor = [UIColor blueColor];
    v.defaultStr = @"123";
    [self.view addSubview:v];
    NSLog(@"%@", v.defaultColor); // UIExtendedSRGBColorSpace 0 0 1 1
    NSLog(@"%@",v.defaultStr);  // 123
}

内存管理策略

内存策略 属性修饰 描述
OBJC_ASSOCIATION_ASSIGN @property (assign) 或 @property (unsafe_unretained) 指定一个关联对象的弱引用。
OBJC_ASSOCIATION_RETAIN_NONATOMIC @property (nonatomic, strong) @property (nonatomic, strong) 指定一个关联对象的强引用,不能被原子化使用。
OBJC_ASSOCIATION_COPY_NONATOMIC @property (nonatomic, copy) 指定一个关联对象的copy引用,不能被原子化使用。
OBJC_ASSOCIATION_RETAIN @property (atomic, strong) 指定一个关联对象的强引用,能被原子化使用。
OBJC_ASSOCIATION_COPY @property (atomic, copy) 指定一个关联对象的copy引用,能被原子化使用。

你可能感兴趣的:(Runtime应用1-关联对象)