// 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引用,能被原子化使用。 |