1、单例模式的作用是解决”应用中只有一个实例“的一类问题。
  2、在一个iOS应用的生命周期中,有时候我们只需要某个类的一个实例,如果有多个实例会占用过多的内存。例如当程序启动时,应用的状态由UIApplication类的一个实例维护,这个实例代表了整个”应用程序对象“,它只能是一个实例,其作用是实现程序中一些共享资源的访问和状态的保护等。
  3、单例模式一般会封装一个静态属性,并提供静态实例的创建方法。代码如下:
1 //
2 //Singleton.h
3 //
4
5 @interface Singleton : NSObject
6
7 + (Singleton*)sharedManager;
8 //属性
9 @property (nonatomic ,strong) NSString* singletonData;
10
11 @end
12
13 -------------------------------------------------------------------------
14
15 //
16 //Singleton.m
17 //
18
19 #import "Singleton.h"
20
21 @implementation Singleton
22  static Singleton *sharedManager = nil;
23 //创建静态实例的方法
24 + (Singleton*)sharedManager
25 {
26     static dispatch_once_t once;
27     dispatch_once(&once, ^{
28         sharedManager = [[self alloc] init];
29     });
30     return sharedManager;
31 }
32 //dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);
33 ??@end
  sharedManager方法我们采用了dispatch_once函数(GCD技术,Grand Central Dispatch,是一种基于C语言的多线程访问技术),它接收一个dispatch_once_t的参数,这个参数GCD提供的结构体,使用时将GCD地址传给dispatch_once函数,这个函数能够记录该代码块是否被调用过。还有一个块参数。对于给定的一个predicate来说,该函数会保证相关的块必定会执行,而且只执行一次,重要的是这个方法是完全线程安全的,不需要线程锁@synchronized之类的语句。需要注意的是,对于只需要执行一次的块来说,传入的predicate必须是完全相同的,所以predicate常常会用static或者global来修饰。这样写代码简单清晰,而且做到了线程安全,这样实现的效率也很高。