1.单例模式
单例模式的作用:可以保证程序在运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便的控制了实例的个数,病节约系统资源。
单例的使用场景:在整个应用程序中,共享一份资源只需要创建初始化一次。
2.实现单例的步骤
1.提供一个静态的全局变量
2.重写allocWithZone方法
3.提供类方法,方便外界访问
4.遵循NSCopying,NSMutableCopying协议,重写方法
注意:单例模式不能使用继承,要实现代码的复用,可以用宏实现
创建一个.h文件,宏的写法包含如下:
#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
使用方法:在需要创建单例的时候,导入头文件。
在单例类的.h文件中,使用
SingleH(Tool)
在.m文件中使用
SingleM(Tool)
在需要创建变量的时候: