单例模式是一种非常有用的设计模式,一个类在系统中只有唯一实例对象.通过全局的一个入口对该实例对象进行访问操作.
SDK 中也有很多类使用了单例模式,例如 Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例.
举例来说,NSFileManager 和 NSWorkspace 类在使用时都是基于进程进行单件对象的实例化.当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配和初始化.单件对象充当控制中心的角色,负责指引或协调类的各种服务.如果类在概念上只有一个实例(例如:NSWorkspace),就应该产生一个单件实例,而不是多个实例;
如果未来可能有多个实例,可以使用单件实例机制,而不是工厂方法或函数.
在程序中单例模式经常希望一个类仅有一个实例,而不运行一个类还有多个实例.在 SDK 中根据特定的需求有些类不仅仅提供了单例访问接口同时还提供了实例化的对象接口.例如 NSFileManager 即可用通过 defaultManager 的方法返回一个对象,但若需要一个新的实例对象同样也可以通过 alloc init 的方法.
+ (instancetype)shareInstance { static YHAccessAuthorization *shareInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shareInstance = [[self alloc] init]; }); return shareInstance; }