Objective C中的單例模式 工具類

2022-09-06 01:36:10 字數 1836 閱讀 6634

單例是ios開發中經常會用到的一種設計模式,顧名思義,即建立乙個類,該類在整個程式的生命週期中只有乙個例項物件,無論是通過new,alloc init,copy等方法建立,或者建立多少個物件,自始至終在記憶體中只會開闢一塊空間,直到程式結束,由系統釋放.

如下圖用不同的方式建立6個物件,但通過列印其記憶體位址,我們可以發現它們是共享同一塊記憶體空間的.

由於在平時開發中經常用到,所以我將建立單例的方法定義成巨集,並封裝成乙個工具類,提供了乙個類方法來快速建立1個單例物件;

並且此類的單例包括了在mrc模式下的建立方式,保證了在mrc模式下,仍能使用該工具類來快速建立1個單例物件;

該工具類使用非常方便,只需在需要用到的類中匯入標頭檔案即可,以下是實現**:

1//2

sharedmodel4//

5//created by arvin on 15/12/21.6//

7//89

#ifndef yysharedmodeltool_h

10#define yysharedmodeltool_h

1112

//.h 檔案

13//

##: 在巨集中,表示拼接前後字串

14#define yysharedmodeltool_h(classname) + (instancetype)shared##classname;

1516

#if __has_feature(objc_arc) //

arc 環境

1718

//.m 檔案

19#define yysharedmodeltool_m(classname)\

20/*

***arc 環境下實現單例的方法****/\

21 +(instancetype)shared##classname \24\

25 - (id)copywithzone:(nullable nszone *)zone \28\

29 + (instancetype)allocwithzone:(struct _nszone *)zone );\

35return

instance;\36}

3738

#else

//mrc 環境

3940

//.m 檔案

41#define yysharedmodeltool_m(classname)\42\

43 +(instancetype)shared##classname \46\

47 - (id)copywithzone:(nullable nszone *)zone \50\

51 + (instancetype)allocwithzone:(struct _nszone *)zone );\

57return

instance;\

58}\

59/*

***mrc 環境需要重寫下面3個方法****/\

60 - (oneway void

)release \

63 -(instancetype)retain \

66 -(instancetype)autorelease

6970

#endif

7172

#endif /* yysharedmodeltool_h */

Objective c中的單例

ios中的單例模式 在objective c中要實現乙個單例類,至少需要做以下四個步驟 1 為單例物件實現乙個靜態例項,並初始化,然後設定成nil,2 實現乙個例項構造方法檢查上面宣告的靜態例項是否為nil,如果是則新建並返回乙個本類的例項,3 重寫allocwithzone方法,用來保證其他人直接...

Objective C 單例模式

意圖 使得類的乙個物件成為系統的唯一例項。類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其進行訪問,比如工廠方法。這個唯一的例項只能通過子類化進行擴充套件,而且擴充套件的物件不會破壞客戶端 import inte ce singletone nsobject singletone shareln...

JAVA中的單例設計(Singleton)模式

一 單例模式有以下特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。二 懶漢式 懶漢式單例類 在第一次呼叫的時候例項化自己 public class singleton private static singleton single nu...