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 */