首页 > 代码库 > iOS设计模式之单例
iOS设计模式之单例
iOS 单例
1.什么是单例?
是一个类在系统中只有一个实例对象。通过全局的一个入口对这个实例对象进行访问。
2.应用场景?
用于只希望一个类只有一个实例,而不运行一个类还有两个以上的实例。
A:iOS SDK 应用到单例模式的类:
UIApplication 的 shareApplication 统一管理
NSUserDefaults 的standardUserDefaults统一管理用户配置文件、
NSFileManager的defaultManager统一负责物理文件的管理,
NSNoficationCenter中defaultCenter负责全局的消息分发。
B:定制场景:主题管理、下载管理、传递Data;
3.如何实现与使用?
ARC + GCD 实现
xx.h
1 + (ARCSingleton *)sharedInstance;
xx.m
1 + (ARCSingleton *) sharedInstance 2 { 3 // 1 4 static ARCSingleton *sharedInstance = nil ; 5 // 2 6 static dispatch_once_t onceToken; // 锁 7 // 3 8 dispatch_once (&onceToken, ^ { // 最多调用一次 9 sharedInstance = [[self alloc] init];10 });11 return sharedInstance;12 }13 14 // 当第一次使用这个单例时,会调用这个init方法。15 - (id)init16 {17 self = [super init];18 19 if (self) {20 // 通常在这里做一些相关的初始化任务21 }22 23 return self;24 }
•1.声明一个静态变量去保存类的实例,确保它在类中的全局可用性
•2.声明一个静态变量dispatch_once_t ,它确保初始化器代码只执行一次
•3.使用Grand Central Dispatch(GCD)执行初始化的block.这正是单例模式的关键:一旦类已经被初始化,初始化器永远不会再被调用。
4.单例工厂
管理项目中大量的单例
工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”
5.模块管理系统
统一管理
---------------------------------------------
参考
1.iOS设计模式反思之单例模式的进化 http://blog.jobbole.com/56439/
2.iOS设计模式(02):单例模式 http://beyondvincent.com/blog/2013/05/09/20/
iOS设计模式之单例