你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 設計模式深入學習IOS版(4)單例模式

設計模式深入學習IOS版(4)單例模式

編輯:IOS開發綜合

1 前言

在程序開發過程中,我們總會遇到一些情況,要求我們有一個類只有一個實例,這種情況下,我們就需要使用單例模式。今天我們就來學習一下這個模式。

轉載請注明出處:http://blog.csdn.net/developer_zhang

2 詳述

2.1 定義

確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。

\

單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素:

    私有的構造方法指向自己實例的私有靜態引用以自己實例為返回值的靜態的公有的方法

    單例模式根據實例化對象時機的不同分為兩種:一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被加載時候,就實例化一個對象交給自己的引用;而懶漢式在調用取得實例方法的時候才會實例化對象。

    2.2 單例模式的優點

      在內存中只有一個對象,節省內存空間。避免頻繁的創建銷毀對象,可以提高性能。避免對共享資源的多重占用。可以全局訪問。

      2.3 適用場景

      由於單例模式的以上優點,所以是編程中用的比較多的一種設計模式。我總結了一下我所知道的適合使用單例模式的場景:

        需要頻繁實例化然後銷毀的對象。創建對象時耗時過多或者耗資源過多,但又經常用到的對象。有狀態的工具類對象。頻繁訪問數據庫或文件的對象。以及其他我沒用過的所有要求只有一個對象的場景。

        2.4 單例模式注意事項

          不要做斷開單例類對象與類中靜態引用的危險操作。多線程使用單例使用共享資源時,注意線程安全問題。

          2.5 代碼實例

          在IOS中單例模式最常見的只有懶漢模式。根據線程安全的實現來區分,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數。

          要實現單例,首先需要一個static的指向類本身的對象,其次需要一個初始化類函數。下面是兩種實現的代碼。

          2.5.1 @synchronized

           //synchronized方式單例
          +(SingletonModel*)shareInstance
          {
              @synchronized(self){
                  if (singleton==nil) {
                      singleton = [[SingletonModel alloc] init];
                  }
              }
              return singleton;
          }


          2.5.2 GCD

          //GCD方式
          +(SingletonModel*)shareInstance
          {
              static dispatch_once_t onceToken;
              dispatch_once(&onceToken,^{
                  singleton = [[SingletonModel alloc] init];
              });
              return singleton;
          }


          總的來說,兩種實現效果相同,但第二種GCD的實現方式寫起來比較簡單。如果不習慣GCD的方式,可以使用第一種方式。

          3 結語

          以上是所有內容,希望對大家有所幫助。

          代碼下載地址:http://download.csdn.net/detail/u010013695/6955121

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved