/*
单例模式的优点:
单例模式在内存中只有一个实例,减少了内存开支。特别是一个对象需要频繁的创建、销毁时,而创建与销毁的性能又无法优化,单例模式的优势就非常明显。
单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。
单例模式可以避免对资源的多重占用。
单例模式可以在系统设置全局的访问点,优化和共享资源访问。
单例模式的缺点:
单例模式一般没有接口,扩展很困难,除了修改代码基本上没有第二种途径实现。
单例模式对测试是不利的。在并行开发环境中,如果单例模式没有完成,是不能进行测试的。
单例模式与单一职责原则有冲突。*/
//1.静态变量
static WZTool * _instance;
//2.+alloc方法内部会调用allocWithZone方法,重写该方法控制永远只分配一次空间
+ (instancetype) allocWithZone: (struct_NSZone*) zone
{
static dispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
//3.提供类方法,方便外界访问,表明身份,说明这是一个单例,注意点:规范share+类名|default+类名|类名
+(instancetype)shareTool
{
return [[self alloc]init];
}
//4.重写copy和mutableCopy方法确保永远只有一个实例对象
-(id)copyWithZone:(NSZone*)zone
{
return_instance;
}
-(id)mutableCopyWithZone:(NSZone*)zone
{
return_instance;
}