iOS设计模式--单例模式

单例模式使用频率非常高,通过一个单例类,可以实现在不同文件之间传递数据。

单例模式应用场景:

  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是为了保证我们单例的线程级别的安全,可以适用于多线程模式下。

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



你可能感兴趣的:(iOS设计模式--单例模式)