单例模式

1.单例模式

单例模式的作用:可以保证程序在运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便的控制了实例的个数,病节约系统资源。

单例的使用场景:在整个应用程序中,共享一份资源只需要创建初始化一次。

2.实现单例的步骤

1.提供一个静态的全局变量

2.重写allocWithZone方法

3.提供类方法,方便外界访问

4.遵循NSCopying,NSMutableCopying协议,重写方法

单例模式_第1张图片
1.arc下单例模式

注意:单例模式不能使用继承,要实现代码的复用,可以用宏实现

创建一个.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)

在需要创建变量的时候:


2.创建单例类

你可能感兴趣的:(单例模式)