IOS開發之 單例設計模式

2021-07-03 14:47:01 字數 3414 閱讀 3547

一.對單例設計模式的分析:

1.單例設計模式(singleton)

1> 單例是什麼:它可以保證某個類建立出來的物件永遠只有乙個

2>有什麼作用:

*節省記憶體開銷

*如果有一些資料,整個程式中都用得上,只需要使用同乙份資源即可(保證大家訪問的資料是相同的,一致的)。

*一般來說,工具類設計成單例模式是比較合適的

3>實現

*mrc

*arc

二.**實現

1.非arc實現:(soundtool是乙個**工具類,把它寫成單例模式)

//  soundtool.h

// created by 張旂 on 15/7/3.

// 單例設計模式

#import

@inte***ce soundtool : nsobject /** 返回soundtool物件 */

+ (instancetype)sharedsoundtool;

@end

//  soundtool.m

// created by 張旂 on 15/7/3.

#import "soundtool.h"

@implementation

soundtool

static soundtool *_soundtool = nil;

/* 重寫alloc方法,保證每次建立的都是同乙個物件.

alloc內部呼叫的是allocwithzone進行物件的初始化.所以本類的任何alloc操作我們都可以通過這個方法攔截。

zone:系統分配的空間

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

); }

return _soundtool;

}- (oneway void)release

- (instancetype)retain

- (nsuinteger)retaincount

- (id)init

); return _soundtool;

}+ (instancetype)sharedsoundtool

- (void)dealloc

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

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

@end

2.arc實現:(datatool是乙個**工具類,把它寫成單例模式)

//  datatool.h

// created by 張旂 on 15/7/3.

#import

#import "singleton.h"

@inte***ce

datatool : nsobject

+ (instancetype)shareddatatool;

//singletonh(datatool)

@end

//  datatool.m

//// created by 張旂 on 15/7/3.

//#import "datatool.h"

@implementation

datatool

//singletonm(datatool)

static datatool *_instance = nil;

/* 重寫alloc方法,保證每次建立的都是同乙個物件.

alloc內部呼叫的是allocwithzone進行物件的初始化.所以本類的任何alloc操作我們都可以通過這個方法攔截。

zone:系統分配的空間

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

); }

return _instance;

}- (id)init

); return _instance;

}+ (instancetype)shareddatatool

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

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

@end

3.定義了乙個singletion檔案,裡面通過巨集定義了單例的實現。包括arc和非arc

// 實現單例設計模式

// 實現單例設計模式

// .h檔案的實現

#define singletonh(methodname) + (instancetype)shared#

#methodname;

// .m檔案的實現

#if __has_feature(objc_arc) // 是arc

#define singletonm(methodname) \

static id _instance = nil;\

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

);\}

\return _instance;\}\

\- (id)init\

);\return _instance;\}\

\+ (instancetype)shared#

#methodname\

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

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

#else // 不是arc

#define singletonm(methodname) \

static id _instance = nil;\

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

);\}

\return _instance;\}\

\- (oneway void)release\\\

- (instancetype)retain\\\

- (nsuinteger)retaincount\\\

- (id)init\

);\return _instance;\}\

\+ (instancetype)shared#

#methodname\

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

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

#endif

#endif

iOS開發之單例模式

單例模式是一種常用的軟體設計模式,在應用這個模式時,單例物件的類必須保證只有乙個例項存在。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。單例的實現步驟 1 重寫alloc...

iOS 開發之單例模式

單例就是工程中只初始化一次,節省記憶體空間,或者共享資源。例如在建立藍芽類,或者做wifi通訊時經常用到。也可以用來傳值。一下介紹兩種建立單例的方法 一,考慮執行緒安全的寫法 考慮執行緒安全的寫法 return modeltool物件 instancetype sharemodel return m...

ios 開發之單例模式

在ios開發中,有很多地方都選擇使用單例模式。有很多時候必須要建立乙個物件,並且不能建立多個,用單例就為了防止建立多個物件。單例模式的意思就是某乙個類有且只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。一 單例模式的三要點 1.該類有且只有乙...