一、ARC中实现单粒模式
- 在.m 保留一个全局的static的实例 static id _名称;
- 重写allocWithZone:方法,在这里创建唯一的实例
- 提供一个类方法让外界访问唯一的实例
- 实现copyWithZone:方法 -- 方法中直接返回static修饰的全局变量,copy是对象方法,所以调用copy就说明已经有了单例对象
二、单粒模式 宏 的定义
- 定义一个.h文件就搞定
- 单粒模式使用
// .h文件 宏中的## 用来转译
#define XMGSingletonH(name) + (instancetype)shared##name; // .m文件 宏的定义默认是一行,多行用\,然后宏就能识别了
#define XMGSingletonM(name) \
static id _instance; \
\
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
\
+ (instancetype)shared##name \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return _instance; \
}