Key-Value Observing (键值监测)

Key-Value Observing (键值监测)

ID:40558800

大小:128.50 KB

页数:16页

时间:2019-08-04

Key-Value Observing (键值监测)_第1页
Key-Value Observing (键值监测)_第2页
Key-Value Observing (键值监测)_第3页
Key-Value Observing (键值监测)_第4页
Key-Value Observing (键值监测)_第5页
资源描述:

《Key-Value Observing (键值监测)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Key-ValueObserving(键值监测)简介KVO是一套当目标对象的属性值改变时观察者对象能够接受到通知的机制。必须先理解KVC才能更好的理解KVO,前者是后者的实现基础。这样的通信机制在MVC设计模式很是常见实现过程简单来说分为3步:1、添加观察这和监测对象2、监测对象改变3、收到值改变通知,处理后续逻辑举个生活中的例子就是给银行卡开通短信通知的业务,总体也是分3步“1、去银行办理短信业务2、账号财产变动3、收到短信通知KVO是框架级别的服务,无需自己发送通知,使用方便,基本不需要添加额外代码即可使用。详情为了使用KVO,必须满足以下3步1、目标对象的属性,必须支持KVO2、注册

2、观察者与被观察者addObserver:forKeyPath:options:context:3、观察者必须实现observeValueForKeyPath:ofObject:change:context:方法第一步、确保目标支持KVO被监测的目标对象的属性支持KVO必须满足以下条件:1、目标对象的属性必须支持KVC,对于1对1属性简单来说就是实现set和get方法。详情和1对多请阅读官方说明。系统已有类及子类自动支持,放心使用。2、自动和手动属性通知目标对象必须能发出属性变化通知。系统默认支持,也可自定义。系统默认支持,且支持的很好,一般无需自定义。//如果需要自定义,需要重新此方法,默

3、认返回YES+(BOOL)automaticallyNotifiesObserversForKey:(NSString*)key;//在set方法中手动调用,变化类型只是针对NSKeyValueChangeSetting-(void)willChangeValueForKey:(NSString*)key;-(void)didChangeValueForKey:(NSString*)key;例如//假设有属性@property(nonatomic,copy)NSString*name;+(BOOL)automaticallyNotifiesObserversForKey:(NSString

4、*)theKey{BOOLautomatic=NO;/*只自定义指定属性,其它仍然自动发送通知*/if([theKeyisEqualToString:@"name"]){//在set方法中手动调用相关方法automatic=NO;}else{//此方法默认返回YESautomatic=[superautomaticallyNotifiesObserversForKey:theKey];}returnautomatic;}-(void)setName:(NSString*)name{//即将变化[selfwillChangeValueForKey:@"name"];_name=name;//

5、已经变化[selfdidChangeValueForKey:@"name"];}//如果说只有值不相等时才发送通知,提升性能-(void)setName:(NSString*)name{if(![nameisEqualToString:_name]){[selfwillChangeValueForKey:@"name"];_name=name;[selfdidChangeValueForKey:@"name"];}}如果涉及1对多的容器类,需要自己实现NSKeyValueChangeInsertion,NSKeyValueChangeRemoval,NSKeyValueChangeRepl

6、acement三种操作对应的方法,例如//Keys为属性名称-(void)removeKeysAtIndexes:(NSIndexSet*)indexes{[selfwillChange:NSKeyValueChangeRemovalvaluesAtIndexes:indexesforKey:@"keys"];//Removethetransactionobjectsatthespecifiedindexes.[selfdidChange:NSKeyValueChangeRemovalvaluesAtIndexes:indexesforKey:@"keys"];}3、属性依赖如果目标对象属

7、性存在依赖关系,注册合适的依赖Keys。核心方法为第一种、+(NSSet*)keyPathsForValuesAffectingValueForKey:(NSString*)keyNS_AVAILABLE(10_5,2_0);说明:1、返回目标属性依赖属性的KeyPath的Set。当对象注册后,KVO自动监测该对象所有的KeyPaths。2、其默认实现从对象所属类的方法列表中匹配方法:+keyPat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。