单例的宏定义实现-07-GCD

 1 //
 2 //  LYHSingleTon.h
 3 //  07-单例的宏定义实现
 4 //
 5 //  Created by mac on 16/4/22.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8 
 9 #ifndef LYHSingleTon_h
10 #define LYHSingleTon_h
11 
12 // .h文件
13 
14 #define LYHSingleTonH + (instancetype)sharedInstance;
15 
16 // .m文件
17 
18 #define LYHSingleTonM 
19 /**
20  *  1. 创建一个全局变量,作用域比较广泛,所有的文件中都能够访问
21  */
22 id _instance;
23 
24 /**
25  *  2. 重写allocWithZone:只分配一次内存
26  */
27 + (instancetype)allocWithZone:(struct _NSZone *)zone {
28     
29     static dispatch_once_t onceToken;
30     dispatch_once(&onceToken, ^{
31         _instance = [super allocWithZone:zone];
32     });
33     return _instance;
34 }
35 /**
36  *  3. 既保证了单例(只分配一次内存),又保证了只init一次;
37  */
38 + (instancetype)sharedInstance {
39     
40     static dispatch_once_t onceToken;
41     dispatch_once(&onceToken, ^{
42         _instance = [[self alloc] init];
43     });
44     return _instance;
45 }
46 /**
47  *  4. 重写copy方法
48  */
49 - (id)copyWithZone:(NSZone *)zone {
50     
51     return _instance;
52 }
53 
54 /**
55  *  下面是不添加注释的宏定义
56  */
57 ///*
58  
59 #define LYHSingleTonM 
60 id _instance;
61 
62 + (instancetype)allocWithZone:(struct _NSZone *)zone {
63 
64 static dispatch_once_t onceToken;
65 dispatch_once(&onceToken, ^{
66 _instance = [super allocWithZone:zone];
67 });
68 return _instance;
69 }
70 
71 + (instancetype)sharedMusicTool {
72 
73 static dispatch_once_t onceToken;
74 dispatch_once(&onceToken, ^{
75 _instance = [[self alloc] init];
76 });
77 return _instance;
78 }
79 
80 - (id)copyWithZone:(NSZone *)zone {
81 
82 return _instance;
83 }
84  
85 */
86 
87 #endif /* LYHSingleTon_h */
时光见证了成长,还很无知,我想一点点幼稚转为有知!
原文地址:https://www.cnblogs.com/foreveriOS/p/5421227.html