单例的概念和方法
第一、基本概念
单例模式是一种常用的软件设计模式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
第二、单例模式的要点与优点
要点;
一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
优点:
1.实例控制:Singleton会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
第三、在IOS中使用单例模式的情况
1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间
2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,则所有访问该变量的调用变得很容易,否则,只能通过一个模块传递给另外一个模块,这样增加了风险和复杂度
第四、创建单例模式的基本步骤
1.声明一个单例对象的静态实例,并初始化为nil
2.声明一个类的工厂方法,生成一个该类的实例,并且只会生成一个
3.重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候不产生一个新实例,
4.实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以确保只有一个实例化对象
5.在多线程的环境中,注意使用@synchronized关键字
- (id) copyWithZone:(NSZone *)zone //第四步
{
return self;
}
第五:用宏定义单例,快速创建单例
// @interface
#define singleton_interface(className) \
+(className *)shared##className;
// @implementation
#define singleton_implementation(className) \
static className *_instance; \
+(id)allocWithZone:(NSZone *)zone\
{\
staticdispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance =[super allocWithZone:zone];\
}); \
return _instance;\
} \
+ (className *)shared##className \
{\
staticdispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance =[[self alloc]init]; \
}); \
return_instance; \
}