手动创建单例

所谓的单例就是:一个应用程序(app)只有一个实例化对象,这个对象就是单例,一般用于音乐播放器和工具类

在这里教大家如何手动创建单例,一种是利用互斥锁的方式,另一种是利用dispatch的一次性执行.

 1//通过互斥锁创建单例
 2 +(instancetype)sharedNetWorkTools
 3 {
 4     //static修饰
 5     static NetworkTools *tools = nil;
 6     //判断实例化对象是否存在
 7     //互斥锁
 8     @synchronized(self) {
 9         if (tools == nil) {
10             tools = [NetworkTools new];
11         }
12     }
13     return tools;
14 }
15 //一次性执行创建单例
16 +(instancetype)sharedNetWorkToolsOnce
17 {
18     //static修饰
19     static NetworkTools *tools = nil;
20     
21     //一次性执行 线程安全
22     static dispatch_once_t onceToken;
23     dispatch_once(&onceToken, ^{
24         if (!tools) {
25             tools = [[NetworkTools alloc]init];
26         }
27     });
28     return tools;
29     
30 }