美文网首页
KVO自动键值观察和手动键值观察

KVO自动键值观察和手动键值观察

作者: FengxinLi | 来源:发表于2016-05-04 18:50 被阅读87次

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

一自动键值观察

1.注册,指定被观察者的属性

2.实现回调方法

3.移除观察

1步的方法代码

[_webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];//context一些其他的需要传递给观察者的上下文信息

2步的实现回调

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object

change:(NSDictionary *)change context:(void *)context

{

if (object == _webView.scrollView && [keyPath isEqualToString:@"contentSize"]) {

float height = [[_webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

CGRect newFrame = _webView.frame;

newFrame.size.height = height;

_webView.frame = newFrame;

_sumHeight = height;

_tableHeaderBackgroundView.frame = CGRectMake(0, 0, ScreenWidth, height);

_openClasTableView.tableHeaderView = _tableHeaderBackgroundView;

[_openClasTableView reloadData];

}

}

3第三步的代码移除观察

-(void)dealloc{

[_webView.scrollView removeObserver:self forKeyPath:@"contentSize"];

}

二手动键值观察

在NSKeyValueObserving.h 文件里面的方法

- (void)willChangeValueForKey:(NSString *)key;

- (void)didChangeValueForKey:(NSString *)key;

需要重写set方法

- (void) setAge:(int)theAge

{

[self willChangeValueForKey:@"age"];

age = theAge;

[self didChangeValueForKey:@"age"];

}

+ (BOOL) automaticallyNotifiesObserversForKey:(NSString *)key {

if ([key isEqualToString:@"age"]) {

return NO;

}

return [super automaticallyNotifiesObserversForKey:key];

}

首先,需要手动实现属性的 setter 方法,并在设置操作的前后分别调用 willChangeValueForKey: 和 didChangeValueForKey方法,这两个方法用于通知系统该 key 的属性值即将和已经变更了;

其次,要实现类方法 automaticallyNotifiesObserversForKey,并在其中设置对该 key 不自动发送通知(返回 NO 即可)。这里要注意,对其它非手动实现的 key,要转交给 super 来处理。

相关文章

  • KVO自动键值观察和手动键值观察

    KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通...

  • KVO

    KVO 简介 KVO 键值观察机制,就是观察指定对象的指定属性变化情况。 KVO 键值观察 依赖于 KVC 健值编...

  • KVO & KVC

    KVO(键值观察者) 什么是KVO,KVO的实现机制是什么? KVO就是键值观察者,是观察者设计模式的实现 使用i...

  • iOS KVO(键值观察)

    KVO(键值观察) 键值观察是 Objective-C 语言的动态语言特性,在运行时通过 KVO,允许一个对象观察...

  • OC-KVO

    KVO是什么 kvo:Key-Value Observing(键值观察),键值观察是一种机制,它允许将其他对象的指...

  • 键值编码(KVC)和键值观察(KVO)

    KVC( Key value coding ) Animal.m Dog.m ViewController KVO...

  • KVO 和 KVC

    1、KVC NSKeyValueCoding,即键值编码 2、KVO KeyValue Observe,即键值观察...

  • IOS KVO详解

    KVO(键值观察)键值观察是一种机制,它允许将其他对象的指定属性的更改通知给对象。 重要提示: 为了了解键值观察...

  • KVO剖析与使用

    KVO -- Key Value Observing(键值观察) 键值观察是一种机制,它允许对象在其他对象的指定属...

  • ios键值观察KVO

    https://blog.csdn.net/crayondeng/article/details/18842395...

网友评论

      本文标题:KVO自动键值观察和手动键值观察

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