KVO与KVC的个人备忘

既然暂时用不到,至少纪录一下,加深下记忆

纯属为了个人备忘,请勿模仿!

KVO:是key-value observing的简称,标准的观察者模式;

2个要素:观察者,被观察者。

3个步骤:

1,在被观察者中,设置可能需要被监控关键字(key);keyPathsForValuesAffecting,key指的是属性值;有时一个变量的变化会引起该关键值的变化,比方说字体高度;有时有2个,或多个变量的变化都会引起关键值的变化,比方说size,宽和高的变化都会导致size关键值的变化。

2,关联上被观察者:addObserver:forKeyPath:options:context: message

3,在处理函数中填充处理代码:- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change (NSDictionary )change context:(void *)context

以下是一个标准的使用KVO使用方式,一般会在视图控制器中,通过KVO的方式将数据和视图显示关联到一起。

典型的KVO事例

objc.io提供的例子

总结:

1,某些标准控件已经设置了可能被监控的关键字,比方说UIScrollview的contentOffset
关键字;所有我们要做的就是剩下的步骤2,3。

2,在观察者被销毁前,比方视图控制被销毁时,必须removeObserver;

3,订阅广播消息的步骤看起来和关联感兴趣的关键字很类似,但要注意区别:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

KVC:是key-value coding的简称

简单来讲就是可以通过valueForKey: 和 setValue:forKey:的函数调用方式来读取或设置值。

学习KVC的关键不是在于用法,而是如何利用这个特性,在某些情况下可以大大简化代码逻辑。

来自objc.io的示例
KVO&KVC的进一步学习:

1,使用时的注意事项;

2,使用的场景,这个两个特性都可以在某些情况下简化逻辑,所以一定要清楚它们适合的场景;

3,看起来神奇的机制背后缺少不了objc语言的机制,需要多多了解背后的故事。

建议看一下来自objc.io的文章《KVC 和 KVO》

你可能感兴趣的:(KVO与KVC的个人备忘)