模型:是应用的数据和应用的状态,它可能是一个数据库,可能是你发动时的内存,或你从网络取得的东西。但它本质上是应用程序的数据。它不知道数据会被如何展示,也不知道它会被如何展示。它会一直留在那。你会把它存在核心数据或者SQL中,它肯能存留在网络中。相同的模型应该可以在不同界面中重复使用。如果你有代表一些数据结合的应用,假设这个是代表入口和选举信息的数据,这个数据本身并不知道信息如何展示给观众,因此这个模型可以用在不同的平台。它能用在不同应用上,这个前提是它独立于如何展现。
视图:它是你经常互动的对象。它代表着你使用的界面相称的模型。如果你使用iphone,它会有对这个设备相称的视图元素,比如触摸操作和标准的界面元素。如果你在不同的平台展示一个视图。它可能需要你使用鼠标,但它不清楚数据本身。视图允许你操纵数据。如果我有一个能改变磁盘上数据的滑动条,这个滑动条就是视图。它不存储任何数据。如果你看一下这些UIKit框架,没有一个知道它们所代表的数据。因此他们并不存储任何东西,他们是完全动态的。他们被创建后使用完就清除。它们很容易配置。
控制器:连接模型和视图。控制器基本是告诉视图关于数据的改变以及视图需要时改变数据。大部分你的应用逻辑会在控制器中。
nib文件:有后缀xib,是你的应用程序视图的蓝图。帮助你设计MVC中的V。它们帮助你规划界面。它们还让你添加控制器对象。当你装载一个nib,它实际会实例化你的控制器对象。它还会让你连接控制器和UI。如果你的控制器有多个IBOutlet,它会让你连接到正确的视图当中。同时它还有IBAction。这允许你连接视图到控制器。
当你创建和保存你的nib。它实际做的是保存nib时候,创建这个对象。然后它把这对象深层的保存起来。当你装载你的应用,nib也会应为你装载的视图或者主窗口而被加载。然后你有了一套可靠的连接和视图。然后确保所有的出口和行为都是连接的。这会保证从nib出来的正确实例是没有错误的。但这个从nib解压缩的顺序是未定义的。
这有一个问题,如果你需要从对nib装载进来的东西做一些额外的调整,你应该如何去做?如果我有一个控制器,在视图有一个滑动条。我需要设置滑动条为基于某些数值的初始值,nib是不知道这些的,如何把他们连接起来?答案是用一个叫做awakeFromNib的功能。它是一个默认的实现,它不对NSObject做任何事情。但任何时候你的nib从冷藏状态出来,任何时候被装载,都会调用awakeFromNib,来告诉你nib中的东西都以被加载。现在做任何初始化都是安全的,你知道所有的连接都以完成。