Delegate,Block,Notification, KVC,KVO,Target-Action

本文详细介绍了iOS中UIControl的目标-动作机制、委托模式、Block的应用,以及Notification的特点。此外还深入探讨了KVC和KVO的原理与实现方法,包括KVC的赋值与取值操作。

Target-Action:

目标-动作机制,所有的UIControl及子类都是这个机制;
原理:在对象产生某个事件的特定时刻,给一个对象发送一个消息;类内部target去执行action方法

Delegate: 

iOS2.0以后出现,delegate配合protocol,delegate 是一对一的关系,修饰符使用weak, 当

Block:

iOS4.0以后出现,一对一


Notification:

一对多, 


KVC:

键值编码,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。

KVC的常用方法:

赋值:

- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

// 注解:
setValue:(属性值) forKey:(属性名),(用于简单属性)。
setValue:(属性值) forKeyPath:(属性名),(用于复合属性,进行内部的点语法,层层访问内部的属性; 例如student.name,Student学生模型类中的name属性。

取值:

- (id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;

// 注解:
valueForKey:属性名
valueForKeyPath:属性名(用于复合属性)

 实现原理:

  • 1.首先去模型中查找有没有 setName,若有,直接调用赋值 [self setName:@"白开水ln简书"]
  • 2.若无,去模型中查找有没有 name 属性,若有,直接访问属性赋值 name = value
  • 3.若无,再去模型中查找有没有 _name 成员变量,若有,直接访问属性赋值 _name = value
  • 4.找不到,就会直接报找不到的错误(valueForUndefinedKey:


KVO:

键值观察
KVO常用方法

[self addObserver: forKeyPath: options: context:]
    
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
}

[self removeObserver: forKeyPath:]

 



 

转载于:https://www.cnblogs.com/shidaying/p/6926993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值