码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中常见的设计模式

时间:2016-10-24 23:40:30      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:field   tom   ldd   not   委托   har   shared   应用设置   应用程序   

一、单例模式

1. 什么是单例模式?

在iOS应用的生命周期中,某个类只有一个实例。

2. 单例模式解决了什么问题?

想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然后才能获取到里面的相关配置信息,这样如果,我们如果要多次读取这个文件的配置信息,那就要创建多个实例,这样严重浪费了内存资源。而实际应用中,当我们要用到的类可能是要反复用到的,一般可以考虑使用单例模式。这样可以大大降低创建新实例带来的内存浪费。

3. 单例模式的实现原理

一般会封装一个静态属性,并提供静态实例的创建方法(该方法瞎用GCD技术保证了整个程序生命周期只运行一次:dispath_once())。

4. 应用实例

  • UIApplication:提供应用程序的集中控制点来保持应用的状态。
  • NSUserDefaults:读取应用设置项目。
  • NSNotificationCenter:提供信息广播通知。
  • NSFileManager:访问文件系统的通用操作。
  • NSBundle:动态加载或卸载可执行代码,定位资源文件,资源本地化和访问文件系统等。

 

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.baidu.com"]];
 NSFileManager *FileManager = [NSFileManager defaultManager];

 

 

二、委托模式

1. 什么是委托模式? 

  • 基本框架类+协议+委托对象
  • 把看似功能很强且很难维护的类,按照职责功能将它抽取出来成为协议,委托其他对象帮自己实现协议中的方法

 2. 委托模式解决了什么问题?

委托时为了降低一个对象的复杂度和耦合度,使其主要框架类能够具有通用性,其他旁枝末节的方法留给委托对象去实现。

3. 委托模式的实现原理

  • 框架类通过delegate属性保持对委托对象的引用,并在特定时刻向委托对象发送消息,通知其做一些事情。
  • 委托对象需符合两个条件:1. 遵循协议 2. 设置为框架类的委托

4. 应用实例

UITextFieldDelegate

#import "ViewController.h"

@interface ViewController () <UITextFieldDelegate>

@property (strong, nonatomic) UITextField *textField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.textField.delegate = self;
}

@end  

 

三、观察者模式

1. 什么是观察者模式?

观察者模式也叫发布/订阅模式。比如订阅天气预报,其中有如下三个角色:

  • 气象局
  • 中国移动短信中心
  • 手机用户 

第一步:手机用户订阅中国移动短信中心的天气预报业务。

第二步:下雨时,气象局发布一条信息给中国移动短信中心:“有雨”

第三步:手机用户就会收到中国移动短信中心的信息:“有雨”,接着用户就会知道应该采取什么的动作:“出门带伞”

 气象局与用户之间的通信是匿名的,用户只知道是中国移动发的短息,不知道气象局的存在。

2. 观察者模式解决了什么问题?

消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同时它们也可以被复用于其他地方

3. 观察者模式的实现原理

 

iOS中常见的设计模式

标签:field   tom   ldd   not   委托   har   shared   应用设置   应用程序   

原文地址:http://www.cnblogs.com/gzhu-lkun/p/5994691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!