博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

转关于cocoa无处不在的MVC

Posted on 2012-06-07 21:28  酸梅拯救地球  阅读(176)  评论(0)    收藏  举报

为了解决“胶水代码”问题,Cocoa提供了多个内部机制:Key-Value Coding(KVC)、Key-Value Observing(KVO)、Key-Value Binding(KVB)。这些机制通过规定了一组通用的Cocoa命名法则、调用规则等,实现了如下功能:

1. 使用一对高度规范化的访问方法,获取以及设置任何对象的任何属性的值(所谓的属性既可以是个实实在在的成员变量,也可以是通过一对成员方法所抽象出的该对象的一个性质)。

2. 通过继承一个特定的方法,并且指定希望监视的对象及希望监视的属性名称,就能在该对象的指定属性的值发生改变时,得到一个“通知”(尽管这不是一个真正意义上的通知),并且得到相关属性的值的变化(原先的值和改变后的新值)。

3. 通过一个简单的函数调用,使一个视图对象的一个指定属性随时随地都和一个控制器对象或模型对象的一个指定属性保持同步。

一个开发者可以利用这些功能,将自己创建的类写的很范化、很通用,然后通过KVB将多个视图“绑定”到一个或多个控制器上,再将控制器绑定到最底层的数据 模型上。这样一来,任何一个视图上的改变都会通过KVC被“压”到控制器里,然后又通过KVC从控制器“压”到数据模型里。当数据模型中的值发生改变时, 一个或多个控制器又会得到KVO的“通知”,接着只要被绑定了的视图又会得到这一个或多个控制器的KVO“通知”。这样以来,开发者只需要在适当的时候告 诉Cocoa,什么对象的什么值该和什么对象的什么值绑定,就可以了,其余数据更新、格式化等工作Cocoa都会替你完成。