2. 在.h 文件遵循 <NSCopying,NSMutabalecopying>
3.定义宏,实现任意类型单单例
#define SingleH(name) +(instancetype)share##name;#if __has_feature(objc_arc)//条件满足 ARC#define SingleM(name) static id _instance;\+(instancetype)allocWithZone:(struct _NSZone *)zone\{\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\_instance = [super allocWithZone:zone];\});\\return _instance;\}\\+(instancetype)share##name\{\return [[self alloc]init];\}\\-(id)copyWithZone:(NSZone *)zone\{\return _instance;\}\\-(id)mutableCopyWithZone:(NSZone *)zone\{\return _instance;\}#else//MRC#define SingleM(name) static id _instance;\+(instancetype)allocWithZone:(struct _NSZone *)zone\{\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\_instance = [super allocWithZone:zone];\});\\return _instance;\}\\+(instancetype)share##name\{\return [[self alloc]init];\}\\-(id)copyWithZone:(NSZone *)zone\{\return _instance;\}\\-(id)mutableCopyWithZone:(NSZone *)zone\{\return _instance;\}\-(oneway void)release\{\}\\-(instancetype)retain\{\ return _instance;\}\\-(NSUInteger)retainCount\{\ return MAXFLOAT;\}#endif
4.使用 括号里的名字 自己定义,但是h和m文件要一样
在 .h文件
在.m文件