iOS设计模式--单例模式

单例模式使用频率很是高,经过一个单例类,能够实如今不一样文件之间传递数据。objective-c

单例模式应用场景:数据库

  1. Windows的Task Manager(任务管理器)就是典型的单例应用,在整个系统运行过程当中咱们只能打开一个任务管理器。安全

  2. 网站的计数器,通常也采用单例模式实现,不然很难实现同步。多线程

  3. 应用程序的日志文件,也采用单例模式实现,因为共享日志文件一直处于打开状态,由于只能有一个实例去操做它,不然,多个对象操做时,内容很差追加。性能

  4. Web应用的配置文件,这是由于配置文件是共享的资源。网站

  5. 数据库链接池的设计通常也采用单例模式,由于数据库链接也是一种数据库资源。数据库软件系统中使用数据库链接池,主要是节省 打开/关闭数据库链接所引发的效率损耗,所以采用单例模式来维护,能够大大下降损耗。操作系统

  6. 多线程的线程池的设计也采用单例模式,缘由如上。线程

  7. 操做系统的文件系统也是单例模式的例子,一个操做系统只能有一个文件系统。设计

总结,单例模式应用场景通常发生在如下条件:日志

1>资源共享状况下,避免因为资源操做时致使的性能或损耗等,如上文的日志文件、应用配置等。

2>控制资源状况,方便资源之间的相互通讯,如线程池等。


IOS中的单例模式

在objective-c中要实现一个单例类,须要完成以下四个步骤:

  1. 为单例对象实现一个静态实例,并初始化,将其设置成nil

  2. 实现一个实例构造方法检查上面声明的静态实例是否为nil,若是是,则新建并返回一个本类的实例。

举实际例子:为RootViewController建立一个单例

@implementation RootViewController
static RootViewController *shareRootViewController = nil;
+(RootViewController *)sharedInstance
{
    @synchronized(self)
        {
            if(shareRootViewController == nil)
                {
                    shareRootViewController = [[self alloc] init];
                }
        }
        return shareRootViewController; 
}

如上代码中,用到了关键字@synchronized是为了保证咱们单例的线程级别的安全,能够适用于多线程模式下。

至此,单例模式介绍完毕。

相关文章
相关标签/搜索