ARC和MRC 相容的單例模式

2021-07-01 23:45:30 字數 2066 閱讀 7759

一、arc下的單例實現

說明:在使用者例項化的方法控制單次執行,同時開放單例的初始化方法。

-(instancetype)init);

}return self;

}static id instance;

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

return instance;}

+ (instancetype) shareaudio);

return instance; }

+(id)copywithzone:(struct _nszone *)zone

二、mrc下的單例實現

說明:在使用者例項化的方法控制單次執行,同時開放單例的初始化方法,由於當前為mrc所以需要控制參記憶體管理的方法單次執行,因此相比arc需要增加:

static id instance; 

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

return instance; }

+ (instancetype) shareaudio);

return instance;

} -(oneway void)release

-(instancetype)autorelease

-(instancetype)retain

-(nsuinteger)retaincount

三、相容mrc 和arc的巨集定義

說明:為了方便後期的引用,可以將單例抽取為巨集定義,鑑於抽取的時候考慮到當前的手動計數和自動計數因此引入條件編譯:

#if !__has_feature(objc_arc)

*****=當前是arc

#else

*****=當前是mrc

#endif

**:#define singleton_h(name) + (instancetype) share##name;

#if !__has_feature(objc_arc)

#define singleton_m(name)\

static id instance;\

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

return instance;\}\\

\+ (instancetype) share##name);\

return instance;\

}\-(oneway void)release\

\-(instancetype)autorelease\

\-(instancetype)retain\

\+(id)copywithzone:(struct _nszone *)zone\

-(nsuinteger)retaincount

#else

#define singleton_m(name)\

static id instance;\

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

return instance;\}\\

\+ (instancetype) share##name);\

return instance;\}\\

+(id)copywithzone:(struct _nszone *)zone

#endif

四、檔案引用

1 在.h檔案引用

singleton_h(audio);

2 在.m檔案引用

singleton_m(audio);

傑瑞教育

出處:

本文版權歸煙台傑瑞教育科技****

MRC和ARC的混編

os5.0以後就開始可以使用arc automatic reference counting 自動引用計數 來代替之前的mrc manual reference counting 人工引用計數 使用arc會減少很多 和忘了釋放物件的苦惱。但是事情都有兩面性。使用了arc之後如果你想復用以前寫過的使用...

單例模式的實現 ARC與非ARC

單例模式是一種很重要的設計模式,在ios開發中,通過使用單例設計模式來實現在程式生命週期內只有乙個例項存在來節省記憶體開銷。下面是arc中單例模式的實現 在自定義的類.m檔案中,需要實現下列的方法 import hmaudiotool.h inte ce hmaudiotool end implem...

iOS ARC與MRC的單例設計模式

就是保證某個類建立出來的物件從始到終只有乙個的一種方案 首先將我們的環境設定為非arc環境,即mrc,如圖 在mrc模式下,我們得自己手動釋放資源,所以得重寫一些與資源建立與釋放相關的方法,以保證單例物件的唯一。新建乙個繼承於nsobject的類 lxffiletool,我直接上 並寫上注釋 lxf...