你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS中的單例設計模式

IOS中的單例設計模式

編輯:IOS開發綜合

  單例設計模式是IOS開發中一種很重要很常用的一種設計模式。它的設計原理是無論請求多少次,始終返回一個實例,也就是一個類只有一個實例。下面是蘋果官方文檔中關於單例模式的圖片:

\

 

  如圖所示,左邊的圖是默認的多例模式,只要發送請求去創建對象,就會得到一個新的對象;而右側的圖是單例模式,發送多個請求創建對象,但是最後返回的始終是同一個。

  因為創建單例類的實例是在確保沒有其他實例的情況下才創建的,並且在程序中使用的過程中始終是同一個實例,因此單例類可以作為提供一個全局訪問資源的類,比如NSUserDefaults,我們可以通過它存儲數據,它裡面的數據就是全局的,無論在哪個類裡面操作都是一樣的。此外,一個單例類還可以防止調用者復制、保留或釋放實例。因此,在開發的工程中可以根據需要來創建不同的單例類。

  單例的創建分Non-ARC(非ARC)和ARC+GCD,後者現在用的比較廣泛,它保證了線程的安全,滿足了靜態分析器的要求,還兼容了ARC,代碼如下:


+(AccountManager *)sharedManager { static AccountManager *sharedAccountManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate, ^{ sharedAccountManagerInstance = [[self alloc] init]; }); return sharedAccountManagerInstance; }

  代碼分析:

  通過這個類方法,可以得到當前類的單例對象。

  在方法中先聲明了一個實例,並初始化為nil,前面的static關鍵字可以保證只執行一次為nil的操作。dispatch_once_t是多線程中的,保證只執行一次。dispatch_once這個函數用於檢查該代碼塊是否已經被調用過,通過它不僅可以保證塊裡面初始化的代碼僅被運行一次,還能保證線程的安全。

  單例的使用非常簡單,可以通過上面的類方法來創建任何你想要的單例類,只需要把AccountManager修改為你想要創建類的名稱,然後通過下面代碼來創建實例即可:


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