Runtime應(yīng)用1-關(guān)聯(lián)對(duì)象

// 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
}

內(nèi)存管理策略

內(nèi)存策略 屬性修飾 描述
OBJC_ASSOCIATION_ASSIGN @property (assign) 或 @property (unsafe_unretained) 指定一個(gè)關(guān)聯(lián)對(duì)象的弱引用。
OBJC_ASSOCIATION_RETAIN_NONATOMIC @property (nonatomic, strong) @property (nonatomic, strong) 指定一個(gè)關(guān)聯(lián)對(duì)象的強(qiáng)引用,不能被原子化使用。
OBJC_ASSOCIATION_COPY_NONATOMIC @property (nonatomic, copy) 指定一個(gè)關(guān)聯(lián)對(duì)象的copy引用,不能被原子化使用。
OBJC_ASSOCIATION_RETAIN @property (atomic, strong) 指定一個(gè)關(guān)聯(lián)對(duì)象的強(qiáng)引用,能被原子化使用。
OBJC_ASSOCIATION_COPY @property (atomic, copy) 指定一個(gè)關(guān)聯(lián)對(duì)象的copy引用,能被原子化使用。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容