單例設計模式

2021-06-27 15:21:59 字數 2087 閱讀 9371

單例模式(singleton),保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

通常我們可以讓乙個全域性變數使得乙個物件被訪問,但它不能防止你例項化多個物件。

乙個最好的辦法就是,讓類自身負責儲存它的唯一例項。

這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法。

因為要保證型別物件的單一性,所以就要考慮objective c在例項化物件時候的各種方式。

因為在objective c中建立的各個型別都繼承自nsobject型別,所以我們需要考慮

nsobject型別裡例項化的方法,下面讓我們展開來說。

在objective c的例項化物件的方式主要有兩種,分別如下:

obj = [nsobject new];

obj = [[nsobject alloc]init];

第一種方式,用new方法初始化其實是第二種方式的總和,當呼叫new方法時,其實是先呼叫了alloc方法進行isa(is a pointer)操作,建立指標,指向記憶體中的資料結構,緊接著呼叫了init方法對資料進行初始化。

第二種方式看起來就很明確了,先呼叫alloc建立指標指向記憶體中的資料結構,再呼叫init方法初始化資料。這裡需要注意的是,init方法只是起到了初始化資料的作用,其實也可以自定義初始化方法,即完全可以自定義乙個普通返回nsobject型別的方法來代替init方法,即init方法是可以隨意被代替的。只不過nsobject型別中new方法缺省會呼叫init方法而已,init方法可以看作是nsobject型別的預設建構函式。

所以綜上所述,其實只有alloc方法是每次必須呼叫的方法,那麼我們只要控制住alloc方法,對此方法進行覆蓋就可以保證型別物件的單一性了。

執行後列印出來的三個例項的位址是一樣的:

p1, p2, p3

說明它們是同乙個例項,無論是 alloc 還是 getperson.

1. 每一次 alloc 都得經過 allocwithzone: 方法,然後進到 getperson方法,這就統一了入口

2. release/autorelease/retaincount 方法保證了例項不被釋放

3. copywithzone: 和 retain 用以確保轉殖還是保留的仍然是原來那個唯一的例項

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...