在程序開發過程中,我們總會遇到一些情況,要求我們有一個類只有一個實例,這種情況下,我們就需要使用單例模式。今天我們就來學習一下這個模式。
轉載請注明出處:http://blog.csdn.net/developer_zhang
確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。
單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素:
單例模式根據實例化對象時機的不同分為兩種:一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被加載時候,就實例化一個對象交給自己的引用;而懶漢式在調用取得實例方法的時候才會實例化對象。
由於單例模式的以上優點,所以是編程中用的比較多的一種設計模式。我總結了一下我所知道的適合使用單例模式的場景:
在IOS中單例模式最常見的只有懶漢模式。根據線程安全的實現來區分,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數。
要實現單例,首先需要一個static的指向類本身的對象,其次需要一個初始化類函數。下面是兩種實現的代碼。
//synchronized方式單例 +(SingletonModel*)shareInstance { @synchronized(self){ if (singleton==nil) { singleton = [[SingletonModel alloc] init]; } } return singleton; }
//GCD方式 +(SingletonModel*)shareInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ singleton = [[SingletonModel alloc] init]; }); return singleton; }
總的來說,兩種實現效果相同,但第二種GCD的實現方式寫起來比較簡單。如果不習慣GCD的方式,可以使用第一種方式。
以上是所有內容,希望對大家有所幫助。
代碼下載地址:http://download.csdn.net/detail/u010013695/6955121