单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点
何时使用单例模式
- 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法。
- 这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
单例的优缺点
单例的优点(主要优点)
- 实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例
- 因为其上面的特点,对于项目中的个别场景的传值,存储状态等等更加方便
单例的缺点(主要缺点)
- 单例实例一旦创建,对象指针是保存在静态区的,那么在堆区分配空间只有在应用程序终止后才会被释放(特殊处理除外)
- 单例不能继承
在Objective-C中实现单例模式
不考虑线程安全的单例模式
static SingleCase *manager = nil;
+ (SingleCase *)defaultManager {
if (!manager){
SingleCase = [[self alloc] init];
return manager;
}
}
线程安全的单例模式
+ (SingleCase *)sharedManager
{
static SingleCase *ManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
ManagerInstance = [[self alloc] init];
});
return ManagerInstance;
}