什么是设计模式(Design pattern)?\r\n设计模式是一套被反复使用的、多数人知晓的、经过分类的,代码编写经验的总结。\r\n为什么要使用设计模式?\r\n设计模式在一定程度上帮助我们实现代码的重用,编写出健壮的代码。\r\n\r\n注意:不能滥用设计模式
有关设计模式
Cocoa基础模式介绍
MVC\r\n模板方法
M,Model,处理应用程序的业务逻辑,数据。关键子系统\r\nV,View,应用程序的UI\r\nC,Controller,用来解除M和V之间的耦合
MVC
MVC
MVC
解除模型子系统和视图之间的耦合,即M与V互不依赖——低耦合\r\n高度可重用性,控制器根据需求选择模型进行处理,并选择视图将处理结果展示出来\r\n快速部署,业务逻辑和界面表现分离且互不干涉,缩短开发时间\r\n\r\n缺点:管理更多的文件。
为什么使用MVC
“不要找我们,我们会找你”——好莱坞模式\r\n系统在需要使用到时候会自动调用,一般不需要直接调用\r\n子类不改变算法结构即可重定义算法或过程中的某些特定步骤\r\n-dealloc,-drawRect,-init,-ViewDidLoad??
模板方法
默认模板方法3大规则:\r\n何时可以调用默认实现\r\n很都情况下,默认的实现没有任何功能。此时调用默认实现是安全的,但也是没有必要的。如-drawRect\r\n何时应该调用默认实现\r\n默认实现的规则可能某些情况与你的设定是相同的,此时不需要再去实现默认方法。如-pointInside:withEvent\r\n何时必须调用默认实现\r\n模板方法的默认实现做了很重要的操作,任何子类重定义时必须显示调用。如-dealloc
模板方法
该模式需要创建子类以重写模板方法\r\n可能难以文档化模板方法的预期使用\r\n需要清晰地标识方法,使得可以理解它们的预期使用,并且需要指明每个方法的调用规则(可以,应该,必须,禁止)\r\n\r\n模板方法模式最好只保留用于最成熟、稳定的设计中
模板方法的弊端
更强大的模式
单例\r\n通知\r\n委托
仅有一个实例,并且定义了创建和访问实例的约定\r\n通常表示物理设备,系统属性或不应该被复制的虚拟资源\r\nUIApplication,UIWindow, Myself,SocketManager等\r\n思考:单例和静态类
单例(Singleton)
封装共享资源\r\n提供唯一一个访问接口(内置创建方法)\r\n控制实例化,阻止创建类的多个实例。需要考虑new,alloc,copy方法\r\n取消分配。由于单例不会被释放,需要在应用终止的时候,释放占用的资源\r\n线程安全
创建一个单例
一个单例的Demo
优点:\r\n对于物理设备,系统属性等。数据唯一,方便使用\r\n\r\n缺点:\r\n一旦被创建,就一直在内存中,直到程序结束前无法被释放
单例
对象之间无须紧密的耦合\r\n一个对象可以给任意数量的对象广播消息,支持一对多、多对多\r\n适用于MVC模式下
通知(Notification)
通知
listenerObject为需要接收通知的对象,一般为self
只有注册接收通知消息,才会接收到相应的通知\r\n对象销毁前,必须注销已注册的所有消息,不然会导致程序Crash
通知
委托是一种简单而强大的模式。在此模式中,程序中的一个对象代表另外一个对象执行某个动作,或者与之相互协作共同完成某个任务。发布委托的对象持有其他对象(委托)的引用。在适当的时候,它会向委托发送消息。消息用于通知委托的对象将要处理或者已经处理某个事件。作为响应,委托对象会更新外观或者更新自身或应用程序其他对象的状态。在某些情况下,委托对象也可以返回一个值。
委托
UIApplicationDelegate Protocol\r\n– application:didFinishLaunchingWithOptions:\r\n– applicationWillTerminate:\r\n– applicationDidFinishLaunching:
常见的委托
创建自己的委托
定义委托对象\r\n设置委托对象\r\n定义委托方法、声明实现委托\r\n使用委托
定义委托对象
设置委托对象
定义委托方法、声明实现委托
使用方式\r\n \r\n\r\n\r\n委托对象被销毁时,一定要将委托对象置为nil