单例模式使用频率很是高,经过一个单例类,能够实如今不一样文件之间传递数据。objective-c
单例模式应用场景:数据库
Windows的Task Manager(任务管理器)就是典型的单例应用,在整个系统运行过程当中咱们只能打开一个任务管理器。安全
网站的计数器,通常也采用单例模式实现,不然很难实现同步。多线程
应用程序的日志文件,也采用单例模式实现,因为共享日志文件一直处于打开状态,由于只能有一个实例去操做它,不然,多个对象操做时,内容很差追加。性能
Web应用的配置文件,这是由于配置文件是共享的资源。网站
数据库链接池的设计通常也采用单例模式,由于数据库链接也是一种数据库资源。数据库软件系统中使用数据库链接池,主要是节省 打开/关闭数据库链接所引发的效率损耗,所以采用单例模式来维护,能够大大下降损耗。操作系统
多线程的线程池的设计也采用单例模式,缘由如上。线程
操做系统的文件系统也是单例模式的例子,一个操做系统只能有一个文件系统。设计
总结,单例模式应用场景通常发生在如下条件:日志
1>资源共享状况下,避免因为资源操做时致使的性能或损耗等,如上文的日志文件、应用配置等。
2>控制资源状况,方便资源之间的相互通讯,如线程池等。
IOS中的单例模式
在objective-c中要实现一个单例类,须要完成以下四个步骤:
为单例对象实现一个静态实例,并初始化,将其设置成nil
实现一个实例构造方法检查上面声明的静态实例是否为nil,若是是,则新建并返回一个本类的实例。
举实际例子:为RootViewController建立一个单例
@implementation RootViewController static RootViewController *shareRootViewController = nil; +(RootViewController *)sharedInstance { @synchronized(self) { if(shareRootViewController == nil) { shareRootViewController = [[self alloc] init]; } } return shareRootViewController; }
如上代码中,用到了关键字@synchronized是为了保证咱们单例的线程级别的安全,能够适用于多线程模式下。
至此,单例模式介绍完毕。