單例是ios開發中經常會用到的一種設計模式,顧名思義,即建立乙個類,該類在整個程式的生命週期中只有乙個例項物件,無論是通過new,alloc init,copy等方法建立,或者建立多少個物件,自始至終在記憶體中只會開闢一塊空間,直到程式結束,由系統釋放.
如下圖用不同的方式建立6個物件,但通過列印其記憶體位址,我們可以發現它們是共享同一塊記憶體空間的.
由於在平時開發中經常用到,所以我將建立單例的方法定義成巨集,並封裝成乙個工具類,提供了乙個類方法來快速建立1個單例物件;
並且此類的單例包括了在mrc模式下的建立方式,保證了在mrc模式下,仍能使用該工具類來快速建立1個單例物件;
該工具類使用非常方便,只需在需要用到的類中匯入標頭檔案即可,以下是實現**:
1//2sharedmodel4//
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...