天天看點

iOS - OC SingleClass 單例類前言1、GCD 方式建立2、互斥鎖方式建立

對于一個單例類,無論初始化單例對象多少次,在程式的整個生命周期内,隻會建立一個類的執行個體對象,而且隻要程式不被殺死,該執行個體對象就不會被釋放,并且該對象是全局的,能夠被整個系統通路到。

在應用這個模式時,單例對象的類必須保證隻有一個執行個體存在。許多時候整個系統隻需要擁有一個的全局對象,這樣有利于我們協調系統整體的行為。比如在 APP 開發中我們可能在任何地方都要使用使用者的資訊,那麼可以在登入的時候就把使用者資訊存放在一個檔案裡面,這些配置資料由一個單例對象統一讀取,然後服務程序中的其他對象再通過這個單例對象擷取這些配置資訊。這種方式簡化了在複雜環境下的配置管理。

有的情況下,某個類可能隻能有一個執行個體。比如說你寫了一個類用來播放音樂,那麼不管任何時候隻能有一個該類的執行個體來播放聲音。再比如,一台計算機上可以連好幾個列印機,但是這個計算機上的列印程式隻能有一個,這裡就可以通過單例模式來避免兩個列印任務同時輸出到列印機中,即在整個的列印過程中我隻有一個列印程式的執行個體。

特點:

在記憶體中隻有一個執行個體

提供一個全局的通路點 -> 類方法能夠友善通路

目的:

避免重複建立,節省記憶體空間。

常用的的單例:

單例建立中,使用 allocWithZone, copyWithZone ... 等等方法,會把所有建立第二個執行個體可能性全部堵死。在真正開發中,有的時候,會需要額外建立一個副本。

1、GCD 建立方式 1

下面的建立方式保證了使用者除了可以通過 sharedManager 方法建立執行個體外,還可以通過 alloc、copy 方法建立不同的執行個體。

2、GCD 建立方式 2

下面的建立方式保證了使用者不管是通過 sharedManager 方法,還是 alloc、copy 方法得到的執行個體都是一樣的。

互斥鎖會影響性能,是以最好還是使用 GCD 方式建立單例。

1、互斥鎖 建立方式 1

2、互斥鎖 建立方式 2

繼續閱讀