iOS设计模式之单例

iOS 单例

1.什么是单例?

   是一个类在系统中只有一个实例对象。通过全局的一个入口对这个实例对象进行访问。

2.应用场景?  

  用于只希望一个类只有一个实例,而不运行一个类还有两个以上的实例。

    A:iOS SDK 应用到单例模式的类:

    UIApplication 的 shareApplication 统一管理  

   NSUserDefaults 的standardUserDefaults统一管理用户配置文件、  

   NSFileManager的defaultManager统一负责物理文件的管理,  

   NSNoficationCenter中defaultCenter负责全局的消息分发。  

  B:定制场景:主题管理、下载管理、传递Data;

3.如何实现与使用?

 ARC + GCD 实现

xx.h

1 + (ARCSingleton *)sharedInstance;

xx.m

 1 + (ARCSingleton *) sharedInstance
 2 {
 3     // 1
 4     static  ARCSingleton *sharedInstance = nil ;
 5     // 2
 6     static  dispatch_once_t onceToken;  // 7     // 3
 8     dispatch_once (&onceToken, ^ {     // 最多调用一次
 9         sharedInstance = [[self  alloc] init];
10     });
11     return  sharedInstance;
12 }
13 
14 // 当第一次使用这个单例时,会调用这个init方法。
15 - (id)init
16 {
17     self = [super init];
18 
19     if (self) {
20         // 通常在这里做一些相关的初始化任务
21     }
22 
23     return self;
24 }


•1.声明一个静态变量去保存类的实例,确保它在类中的全局可用性

•2.声明一个静态变量dispatch_once_t ,它确保初始化器代码只执行一次

•3.使用Grand Central Dispatch(GCD)执行初始化的block.这正是单例模式的关键:一旦类已经被初始化,初始化器永远不会再被调用。

4.单例工厂  

  管理项目中大量的单例  

  工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”

5.模块管理系统

   统一管理

---------------------------------------------

参考

1.iOS设计模式反思之单例模式的进化 http://blog.jobbole.com/56439/

2.iOS设计模式(02):单例模式 http://beyondvincent.com/blog/2013/05/09/20/

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。