美文网首页
OC 关联对象

OC 关联对象

作者: mikey_Jiang | 来源:发表于2020-12-11 16:12 被阅读0次

关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上.

举个栗子: mikey是Person类的一个实例, 他的dog0(Dog类的一个OC对象)被mikey的一个绳子(key)牵着散步, mikey和dog0是关联起来的, 当然, mikey还可以牵着dog1,dog2...

应用场景:

1.添加公共属性

可以通过分类自定义一个tabbar, 并暴露公共的属性和方法, 方法可以直接定义, 属性的部分就需要通过runtime的关联对象来添加

2.添加私有成员变量

在分类中添加不想暴露在公共声明中的成员变量.例:

给按钮分类添加点击时间的回调

@interface UIButton(Callback)

-(instancetype)initWithFrame:(CGRect)frame callback:(void(^)(UIButton*))callbackBlock;

@end

@interface UIButton()

@property(nonatomic,copy)void(^callbackBlock)(UIButton*button);

@end

@implementationUIButton(Callback)

-(void(^)(UIButton*))callbackBlock{

returnobjc_getAssociatedObject(self,@selector(callbackBlock));

}

-(void)setCallbackBlock:(void(^)(UIButton*))callbackBlock{

objc_setAssociatedObject(self,@selector(callbackBlock),callbackBlock,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(instancetype)initWithFrame:(CGRect)frame callback:(void(^)(UIButton*))callbackBlock{

if(self=[superinitWithFrame:frame]){

self.callbackBlock=callbackBlock;

[self addTarget:selfaction:@selector(didClickAction:)forControlEvents:UIControlEventTouchUpInside];

}

return self;

}

-(void)didClickAction:(UIButton*)button{

self.callbackBlock(button);

}

@end

3.关联KVO观察者

我们在分类中使用KVO, 推荐使用关联对象作为观察者, 尽量避免对象观察自身

相关文章

  • Swift 为分类增加属性objc_getAssociated

    OC 获取关联对象 Swift 获取关联对象——错误的写法 Swift 获取关联对象——正确的写法 设置关联对象 ...

  • OC关联对象

    ,❓思考一下:分类中能否添加属性?能否添加成员变量?直接上代码验证一下:创建一个Person类和它的分类Perso...

  • OC 关联对象

    关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上. 举个栗子: mikey是Person类的一个实...

  • OC关联对象

    分类实现原理、加载时机[https://www.jianshu.com/p/7c830ce3c303] 一. 为什...

  • OC-关联对象

    分类(Category):是OC中的特有语法,它是表示一个指向分类的结构体指针。原则上它只能增加方法,不能增加成员...

  • 探寻OC关联对象

    简单应用 关联对象常用的API如下: 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联...

  • OC-关联对象

    类扩展和分类 category:类别、分类用来给类增加方法、属性、协议不能增加成员变量,在分类的结构体中并没有存储...

  • 四、isa 指针关联类

    主要内容:1.OC对象的本质2.isa 与 类的关联原理3.isa 与 类的关联验证 1.OC对象的本质 先了解编...

  • Runtime 之关联对象

    关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上。 关联对象的原理: Runtime提供的API:...

  • OC-关联对象AssociatedObject

    关联对象 前言 我们都知道ARC环境下, 在一个类中声明一个属性@property (nonatomic, ass...

网友评论

      本文标题:OC 关联对象

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