iOS中的單例到底怎麼寫?

2021-07-29 15:25:57 字數 1314 閱讀 3514

無爭議的部分,靜態變數+dispatch once(執行緒安全)

爭議部分,alloc/copywithzone/mutablecopywithzone的重寫

既然是在cocoa下,當然要學習蘋果怎麼實現,最大限度保持自己的單例和蘋果的單例相似。

於是乎,我就閒的蛋疼利用[nsuserdefault standarduserdefaults]來檢測一下 是否需要實現這些爭議的方法?

nsuserdefaults *copydefaults = [[nsuserdefaults standarduserdefaults] copy];
-[nsuserdefaults copywithzone:]: unrecognized selector sent to instance 0x60800005ed50

'nsinvalidargumentexception', reason: '-[nsuserdefaults copywithzone:]: unrecognized selector sent to instance 0x60800005ed50'

不要!

nsuserdefaults *copydefaults = [[nsuserdefaults standarduserdefaults] mutablecopy];
-[nsuserdefaults mutablecopywithzone:]: unrecognized selector sent to instance 0x60800004e220

'nsinvalidargumentexception', reason: '-[nsuserdefaults mutablecopywithzone:]: unrecognized selector sent to instance 0x60800004e220'

不要!

nsuserdefaults *defaults = [[nsuserdefaults alloc] init];

nslog(@"standarduserdefaults:%@ \n allocuserdefaults%@ ", [nsuserdefaults standarduserdefaults], defaults);

standarduserdefaults:: 0x60000005cc50> 

allocuserdefaults: 0x60000005fbc0>

不要!

iOS使用巨集寫單例

本文只介紹arc情況下的單例 過去一直背不下來單例如何寫,就是知道這麼回事,也知道通過巨集來寫單例,但是一直記不住,今天就來記錄一下 void viewdidload建立person,列印,實際上是2個物件。沒毛病.建立方法 import siperson.h static siperson ins...

iOS中的單例

單例模式用於當乙個類只能有乙個例項的時候,通常情況下這個 單例 代表的是某乙個物理裝置比如印表機,或是某種不可以有多個例項同時存在的虛擬資源或是系統屬性比如乙個程式的某個引擎或是資料。用單例模式加以控制是非常有必要的。單例模式需要達到的目的 1.封裝乙個共享的資源 2.提供乙個固定的例項建立方法 3...

iOS中的單例模式

單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。單例模式的特點 顯然單例模式的特點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。例項過程 static databasem...