一.单例模式是设计模式的一种,它是由众多的程序猿前辈们总结出来的一种设计模式
二.单例模式在整个程序过程中,一个类只有一个实例.从而达到节约系统资源的目的.比如说一些app的登录界面,可能在多个控制器中都需要用到,那么使用单例可以明显的节约系统资源.
三.新建一个类,创建多个对象,如果打印他们的地址,都是一样的话,就说明这个类是一个单例.其中有个注意的地方,必须是同一种创建方式,如果不是同一种创建方式,看起来像"单例",但是打印地址是不一样的.
四.单例的实现分为ARC环境下和MRC环境下.
#import "JHTool.h" @implementation JHTool //1.提供一个静态变量 static JHTool * _instance; //2.重写该方法控制只分配一次空间 +(instancetype)allocWithZone:(struct _NSZone *)zone { //加同步锁方式 /* @synchronized(self) { if (_instance == nil) { _instance = [super allocWithZone:zone]; } } */ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super allocWithZone:zone]; }); return _instance; } //3 +(instancetype)shareJHTool { return [[self alloc]init]; } //4.更严谨的做法,需要考虑copy 和mutableCopy操作 -(id)copyWithZone:(NSZone *)zone { return _instance; } -(id)mutableCopyWithZone:(NSZone *)zone { return _instance; } #if __has_feature(objc_arc) #else //MRC情况下 -(oneway void)release { } -(instancetype)retain { return _instance; } //检查对象的引用计数器 -(NSUInteger)retainCount { return MAXFLOAT; } #endif @end