《iOS总结》设计模式-MickyChiang
来源:互联网 发布:webhook php自动部署 编辑:程序博客网 时间:2024/06/07 00:28
突然发现对于设计模式这概念大家都不是很深刻(没错 包括我= =),在写这篇文章之前,我也有认真的去查有关的知识,在这里给大家总结一下我认为的iOS的设计模式。
一. MVC模式(要理解MVC概念问题,我觉得重要)
我在写代码时经常用到这种模式,原因很简单,这种模式层次清晰,简单明了,且易于维护。
MVC,即Model(数据模型)-View(视图)-Controller(控制器),通过数据模型、视图展示和控制器逻辑三者进行UI展现和数据交互的逻辑控制。
简单的举例说明:
1.Model : 模型对象可能是表示游戏中的角色或地址簿中的联系人。例如创建一个Student类。
2.View : 在iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。
3.Controller : 对于不同的UIView,有相应的UIViewController,对应MVC中的C。例如在iOS上常用的UITableView,它所对应的Controller就是UITableViewController。
需要注意以下几点:
1.Model和View永远不能相互通信,只能通过Controller传递。
2.Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信。
3.Controller可以直接与View对话,通过outlet,直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是Controller从Model中取得并经过加工了)。Controller是View的代理(delegate),以同步View与Controller。
二. Delegate模式
当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现时就需要用到代理。
代理模式有强大的解耦优势,在平日编写代码时被广泛应用。
代理模式可以对复杂对象进行修改而不需要子类化。与子类化不同的是,您可以照常使用复杂对象,而将对其行为进行修改的定制代码放在另一个对象中,这个对象就称为代理对象。复杂对象需要在预先定义好的时点上调用代理对象的方法,使其有机会运行定制代码。
代理通过protocol协议实现。(协议中有必须实现和需要实现两种方法,在这不一一举例了= =)
三. Target-action模式
Target-action模式同样具有很好的解耦合优势。
控件通过目标-动作模式将用户的交互通知给您的应用程序。当用户以预先定义好的方式(比如轻点一个按键)进行交互时,控件就会将消息(动作)发送给您指定的对象(目标)。接收到动作消息后,目标对象就会以恰当的方式进行响应(比如在按动按键时更新应用程序的状态)。
四. 观察者模式(NSNotificationCenter、KVO)
优势也是解耦合。
一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。
实例:
NSNotificationCenter:获取通知中心对象;给通知中心发送一个消息;在一个对象被系统回收前,要清除掉自己的观察者身份。(任何位置可以发送消息,注册观察者的对象可以接收)。
KVO模式:由被观察的对象调用方法,添加观察者;一旦被观察的属性发生改变,系统会调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法;记得要解除自己的观察者身份。(键值对改变通知的观察者,平时基本没用过)
五. 单例模式
单例使用起来真的很不错。有使用简单,延时求值,易于跨模块等优点。
单例的含义是确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。
java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。
object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,返回的也只是此单例类的唯一静态变量。
好了 差不多就这些 有错误又补充的欢迎来留言= =
有些demo之后整理会上传= =
- 《iOS总结》设计模式-MickyChiang
- 《iOS总结》推送消息-MickyChiang
- 《iOS总结》UIKit框架-MickyChiang
- 《iOS总结》传值方式-MickyChiang
- 《iOS总结》OC内存管理-MickyChiang
- 《iOS总结》数据持久化-MickyChiang
- iOS遇到的那些事(持续总结并更新)-MickyChiang
- 《iOS总结》UITableViewCell的增加与删除-MickyChiang
- IOS设计模式总结
- iOS设计模式--总结
- iOS中常用开发设计模式总结
- iOS 中的常用设计模式总结
- iOS常用设计模式总结(一)
- iOS面试总结 - 4.ios开发中的基本设计模式
- 设计模式 ----- 设计模式总结
- ios中的设计模式
- IOS 设计模式
- iOS设计模式:观察者
- Aizu 1296 简单bfs
- SQL COUNT的用法
- sync、fsync、fdatasync、fflush函数
- mysql命令
- 递归、回溯练习题答案
- 《iOS总结》设计模式-MickyChiang
- 十道海量数据处理面试题
- LeetCode-Find Minimum in Rotated Sorted Array(找出反转数组中的最小值)
- 一些算法相关博客
- UITableView获取cell的row值(解决自定义cell里的button通过点击无法获得cell的indexpath的问题
- iOS NSNotification的使用(1)
- \r,\n,\r\n的区别
- 路由器交换器配置ISIS
- SQL HAVING的用法