九十一、iOS应用程序开发架构

Model-View-Controller(模型-视图-控制器)

在物件导向编程  流行之前  和  流行之后的一段时间内  都有  一种趋势  就是  创建用户界面的代码  和  控制应用程序逻辑与数据的代码  紧密地  混  在一起。这种结合  使  应用程序的维护  变得  极其困难  并且  将  应用程序  锁定  在单独的用户界面之上。如果  要将  Windows应用程序  移植  到Mac OS X,那么  所有创建Winodows用户界面的代码  就要  从整个程序代码中  提取出来,然后  用  创建Mac OS X用户界面的代码  取而代之。如果  将  这个应用程序  转换成  基于网页的解决方案,那么  刚刚这个过程  又要重复一遍。完成这种工作的成本  将会变得  异常昂贵。最后  你  会发现  每增加  一个目标平台,整个程序  都需要  重新  写一遍。

模型-视图-控制器设计模式的目标  就是  要将  控制应用程序逻辑、数据的代码  和  创建用户界面的代码  分离。模型  是  对应用程序数据的封装。视图代表的  是  用户界面  并且  管理  用户界面。控制器提供的  是  应用程序的基本逻辑  并且  扮演  中间人的角色。控制器  会根据用户与视图的交互  向模型  发出  指令,并且  将  模型的回应  通过视图  反馈  给用户。这种方法的真正价值  在于  模型  根本不用关心  用户界面,它  只需要根据控制器的要求  存储、控制  数据  并且  完成  一些特定任务。与之相似  视图  也根本不用关心  应用程序的数据  以及  逻辑。

在物件导向型的编程环境当中,比如  iOS  和  objective-c,模型、视图  和  控制器  都属于  物件。值得指出的  是  应用程序  并不限于  单个模型、视图  和  控制器。实际上  一个应用程序  可以包含  若干个视图物件、控制器物件  和  模型物件。

视图控制器  与  模型物件交互的方法  就是  通过适用于模型物件的措施  和  模型物件的属性。

Target-Action(目标-动作)模式、IBOutlet(出口)  和  IBAction(动作)

你  创建  iOS应用程序时  一般  会使用  界面创建器  来设计  用户界面,并且  使用  代码编辑器  来编写  程序代码。在上一部分  我们  了解了  视图控制器  与  模型物件  是  如何交互的;在这一部分  我们  要看看  界面创建器创建的视图  与  视图控制器  是  如何交互的。

当用户  与  视图上的物件  交互时,比如  触摸  按钮后  放开,就会触发  一次事件,比如  这里的Touch Up Inside事件。目标-动作模式的目的  就是  让  你  指定  在某次事件  触发过后  采取  何种行动。换句话说  就是  透过这种方式  将  界面创建器中你设计的界面里的物件  和  你编写的objective-c代码  连接起来。

将  视图控制器物件  和  视图物件  连接起来  采取  某项特定措施  是  通过动作  办到的。动作  就是  一项措施,这项措施  适用于  视图控制器物件,当某项事件  在视图物件中  触发时,就会采取  这项措施。创建  一项动作措施  需要用到  关键字IBAction。

与  动作  相对的  是  出口。动作  是  视图物件对控制器采取的措施。而  出口  则允许  视图控制器  直接访问  视图物件的内部。比如  视图控制器  需要设定  标签物件的文本,那么  就要用IBOutlet关键字  创建  出口。从编程的角度讲  出口  就是  包含在物件当中的变量。

创建  小类

创建小类  是  任何物件导向型编程环境都具备的重要特性,iOS SDK  也不会例外。利用  这种特性  我们  可以创建  一类新的物件,并且  使  这类物件  包含  在旧的某类物件当中,新的这类物件  就会具有  旧的那类物件的特点,并且  还可以具备  新的特点。比如,人类  创建了  汽车这类物件,汽车这类物件  包含  在交通工具这类物件当中,于是  汽车这类物件  就具备  交通工具这类物件的特征,但是  也具备了  一些新的特征。

如果  已经存在的某类物件  能够满足  我们的部分需要  而不是  全部需要,那么  我们  需要创建  包含在这类物件中一类新的物件。

我们  开始使用  视图控制器这类物件时,就可以看到  创建小类的例子了。UIKit(用户界面套件)框架  提供了  UIViewController(用户界面视图控制器)这类物件。我们  经常需要创建  包含在UIViewController这类物件当中新的一类物件,并且  编写  新的措施  适用于  新创建的这类物件  以及  为新创建的这类物件  添加  新的组成部分。

代理

代理机制  允许  一个物件  将  完成某项任务的责任  交给  另外一个物件。透过这样的方式  我们  就可以改变  一个物件的工作方式,而  不需要创建  跟这个物件属于同一类的一类新物件。

我们  可以在UIApplication(用户界面应用程序)这类物件当中  看到  应用代理机制的例子。每个iPhone应用程序  都必须拥有  一个UIApplication类型的物件。这个物件  在iOS环境当中  负责控制  和  操作应用程序。UIApplication这类物件完成的大多数工作  都发生  在后台。但是  也有  某些特定的情况下  UIApplication类型的物件  会给  我们  机会  让  我们  添加  自己的功能。比如  UIApplication类型的物件  会把  applicationDidFinishLaunchingWithOptions:这项措施  代理给  我们  使   我们  在应用程序  刚加载的时候  能够完成  某些  特定的任务。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值