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是爲了保證咱們單例的線程級別的安全,能夠適用於多線程模式下。

至此,單例模式介紹完畢。

相關文章
相關標籤/搜索