美文网首页
Runtime应用1-关联对象

Runtime应用1-关联对象

作者: Lonely_Flyer | 来源:发表于2021-10-10 16:12 被阅读0次
// 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-关联对象

    使用 内存管理策略 内存策略属性修饰描述OBJC_ASSOCIATION_ASSIGN@property (ass...

  • runtime关联对象应用

    一个很常用的功能,就是当我们的btn在点击的时候需要更多的信息,功能,比如说以下的传参功能: 通过以上的演示就可以...

  • Runtime应用系列:关联对象

    AssociatedObject 对象实例化后不能动态添加属性,除非在动态创建一个类时。如果想给一个已经存在的对象...

  • iOS runtime应用:关联对象

    问题:“如何给OC对象(如 NSArray、UIViewController等)添加一个属性,且不使用继承的情况下...

  • 如何通过 Runtime 获取对象的属性

    Runtime 的应用场景:关联对象: (1).仿照 SDWebImage- <1>给分类动态添加属性;- <2>...

  • runtime关联对象篇(Associated Object)

    runtime原理与实践: 关联对象篇(Associated Object)(应用场景:为分类添加“属性”,为UI...

  • iOS runtime实战应用:关联对象

    前言 在开始之前建议先阅读iOS runtime的基础理解篇:iOS内功篇:runtime 有筒子在面试的时候,遇...

  • ios运行时一些方法说明

    一. 关联对象主要函数: 基本说明:关联对象就是runTime界的NSMultableDictionary voi...

  • Runtime - 关联对象

    马上就要开始新的项目,这个礼拜抽空来写一篇博客。于是就写一个比较贴近大家工作开发的runtime其中一个用法吧。一...

  • 关联对象底层结构

    关联对象的方法 runtime给我们提供了三个关于关联对象的方法,如下。点击查看如何添加关联对象[https://...

网友评论

      本文标题:Runtime应用1-关联对象

      本文链接:https://www.haomeiwen.com/subject/ofvholtx.html