單例模式使用頻率很是高,經過一個單例類,能夠實如今不一樣文件之間傳遞數據。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是爲了保證咱們單例的線程級別的安全,能夠適用於多線程模式下。
至此,單例模式介紹完畢。