MVVM笔记

经典的MVC (Model-View-Controller) 里Model负责数据,View负责界面,Controller负责两者之间的交互。但仔细想想,View和Controller虽然是不同的组件,却几乎总是一对一配套使用。在MVVM (Model-View-ViewModel) 中,就把MVC的View和Controller概念合并成一个View/Controller,然后Model-View间多加一层ViewModel。

在ViewModel可以将Model数据转换为View呈现所需数据(如将NSDate格式化成字符串),可以保存View状态,可以做用户输入的验证,可以发收网络请求等。

ViewModel的属性变化通过KVO (Key-Value Observing) 通知Controller,可用facebook的KVOController库。

ps: [photosArray addObjectsFromArray:photos]不会发KVO通知,要用[[self mutableArrayValueForKeyPath:@"photosArray"] addObjectsFromArray:photos];

参考: