所有的iPhone应用程序都是基于UIKit框架构建而成的,所以它们在本质上具有相同的核心架构。

UIKit框架的设计模式 结合了很多在Mac OS X Cocoa应用程序中使用的设计模式,理解这些设计模式对于创建iPhone程序是很关键的。

1.模型-视图-控制器模式 MVC模式

模型-视图-控制器模式(model-view-controller)简称MVC模式,它将您的代码独立分割为几个部分。模型部分定义应用程序的数据引擎,负责维护数据的完整性;视图定义应用程序的用户界面;控制器则充当模型和视图的桥梁,负责实现数据和现实的更新。

2.目标-动作

控件通过目标-动作的模式将用户的交互通知您的应用程序,当用户以预先定义好的动作(比如点击一个按钮)进行交互时,空间就会将消息(动作)发送给您制定的对象(目标)。接收到动作消息后,目标对象就会以恰当的方式相应(比如按动按钮的时候刷新应用程序的状态)。

3.单例模式

单例模式确保一个给定类只有一个实例出现,这个实例有一个全局的访问点,它通常使用懒加载的时候在第一次使用的时候再取加载
注意:苹果使用了大量的单例模式,我们用到的[UIAppliacation shareapplication],[UIScreen mainscreen],[NSUserDefaults standardUserDefaults] 等返回的都是一个单例对象。
在一些情况下使用单例模式会是非常合理的,比如你需要一个全局配置处理类,使用单例模式就会很好的实现。
使用GCD的方式可以很容易实现一个单例模式

1
2
3
4
5
6
7
8
9
10
11
+(Singelton)shareInstance{
// 1
static Singelton *st;
// 2
static dispatch_once_t onceToken;
// 3
dispatch_once(&onceToken,^{
st =[[Singelton alloc]init];
});
return st;
}

在这段代码中有三个需要注意的地方:

  1. 声明一个static静态变量保存实例变量,确保它在类中的全局可用性。
  2. 声明一个static静态dispath_once_t,确保初始化代码只执行一次
  3. 使用 Grand Center Dispatch (GCD)执行Singelton变量block,正式单例模式的关键,一旦类被初始化,初始化器就不会再被调用
    下次再调用shareInstance的时候,dispatch_once块中得代码将不会执行(因为他已经被执行了一次),你将得到已经初始化好的类

4.代理设计模式

代理设计模式 一个对象提供机会对另一个对象发生变化时候做出反应。
代理模式基本思想:两个对象协同解决问题,通常用于对象之间的通信

Cocoa 框架中同样运用了大量的代理模式,每个UI控件后边都声明了一个id类型的delegate或是datasource,比如说最常用到的UITableView 控件头文件中声明了:

1
2
@property (notamatic, assign)id <UITableViewDataSource> datasource;  
@property (notamatic, assign)id <UITableViewDelegate> delegate;

即这个代理要遵循某一个协议。