iOS开发,以下几种设计模式:
Target Action Design Pattern;
Notification Pattern
MVC Pattern
KVO (Key-Value Obsetving)
Delegate Pattern
MVC (Modal View Controller)
这个设计的主要用意在于将数据和视图分离开来.在IOS cocoa touch编程中,MVC机制被发挥的淋漓尽致.
只有充分理解MVC,才能写出优雅的IOS app 。为充分理解MVC中相关的概念(比如:Delegate,Protocol,Notification等).
MVC
规则:
- Model不允许于视图交互,Model是管理数据,当Model中的数据发送改变时,与之对应的视图应更新。这就需要一种机制来支持。为此IOS框架提供了两张支持:Notification 和 KVO (Key-Value Observing)KVO可简单理解为,为你关注的Ke对象注册一个监听器,当数据发生改变时,就发出广播给所有的监听器。
2.View不允许直接引用Modal,它只能被Controllerd所控制。Controller控制View显示什么数据,我们知道,View所要显示是来源Modal,View上产生的事件(比如Touch事件)需要通知Controller。既然MVC不允许直接打交道,就需要提供一种机制。
3.IOS确实提供一种机制,名:Delegate.Delegate这个词,翻译为:代理,名称上的差异有什么,重要的是如何理解Delegate,Delegate设计模式的引用,就为解决UIView与Controller耦合互动问题。
- 图中,绿色的箭头表示直接引用。 对View 的直接引用体现在 IBOutlet 上。 当引用一个View 时,比如Button。 需要在ViewController
中声明一个 IBOutlet UIButton * btn;
然后,我们看View 是怎么向 Controller 通信的。对于这个, iOS 有三种常见的模式:
1.1
设置View对应的Action Target。如设置UIButton的Touch up inside的Action Target。1.2
设置View的Delegate,如UIAlertViewDelegate, UIActionSheetDelegate,UITextFieldDelegate等。1.3
设置View的data source, 如UITableViewDataSource。
通过以上三种模式,View既能向Controller通信,又无需知道具体的Controller是谁,这样,View 就与Controller解耦了。
除此之外, iOS 还提供了 Action-Target 模式来让Controller 监听View 触发的事件。 View 又是如何获取数据呢? iOS提供了 Data source 的概念,其实也就是Protocol 的应用。