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文件