菜鳥學習之路 單例模式學習

2021-07-02 16:54:05 字數 1756 閱讀 7712

單例模式設定思想:可以保證程式在執行過程中,乙個類只有乙個例項(乙個物件)。 步驟

1.建乙個全域性的變數

2.在allocwithzone: 方法中攔截記憶體的分配,並在方法內部加執行緒鎖,防止多個執行緒同時載入方法

3.在新建乙個share方法,方便外界分辨

#import "person.h"

@implementation

person

// 加上了static 關鍵字,這個全域性變數只能在該檔案中使用,不能用extern(引用某個全域性變數(並非定義))引用,以後宣告全域性變數,盡量用static

static id _person;

/*static 

:修飾變數

1> 修飾全域性變數

*全域性變數的作用域僅限於當前檔案內部

2> 修飾區域性變數:

*區域性變數的生命週期跟全域性變數類似

*但是不能改變作用域(只能在函式內存在,出了函式外引用不到)

* 能保證區域性變數永遠只初始化依次,再程式執行過程中,永遠只有乙份記憶體

*/// 因為呼叫alloc方法,alloc方法實質上是呼叫allwihtzone:方法

四、單例模式(懶漢式)

1.arc

@inte***ce hmdatatool : nsobject

+ (instancetype)shareddatatool;

@end

@implementation hmdatatool

// 用來儲存唯一的單例物件

static id _instace;

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

);return _instace;

}+ (instancetype)shareddatatool

);return _instace;

}- (id)copywithzone:(nszone *)zone

@end

2.非arc

@inte***ce hmdatatool : nsobject

+ (instancetype)shareddatatool;

@end

@implementation hmdatatool

// 用來儲存唯一的單例物件

static id _instace;

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

);return _instace;

}+ (instancetype)shareddatatool

);return _instace;

}- (id)copywithzone:(nszone *)zone

- (oneway void)release

- (id)retain

- (nsuinteger)retaincount

- (id)autorelease

@end

/*當類載入當oc執行時環境中(記憶體),就會呼叫一次(乙個類只會載入一次)

*/+ (void)load

/*當第一次使用這個類的時候呼叫,就是說第一次建立這個類的物件的時候呼叫

*/+ (void)initialize

/*當類載入當oc執行時環境中(記憶體),就會呼叫一次(乙個類只會載入一次)

*/+ (void)load

/*當第一次使用這個類的時候呼叫,就是說第一次建立這個類的物件的時候呼叫

*/+ (void)initialize

Spring學習之路 單例模式和多例模式

在spring中,bean可以被定義為兩種模式 prototype 多例 和singleton 單例 singleton 單例 只有乙個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。prototype 多例 對這個bean的每次請求都會建立乙個新的bean例項,類似於new。spr...

單例模式學習

通常情況下我們可以讓乙個全域性變數使得乙個物件被訪問,但不能防止你例項化多個物件,乙個最好的方法就是,讓類自身負責儲存他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且他可以提供乙個訪問該例項的方法。一 經典單例 public class singleton public static sin...

學習單例模式

1 單例模式是怎樣產生的?當想要讓乙個定義類只能例項化乙個物件,則不能對外提供public的構造方法,而是要把構造方法定義為private的,這樣就可以讓定義類自己控制類的例項化。同時,也要對外提供乙個public的方法,用來得到定義類的例項。當然,在定義類的內部需要初始化來建立自身的乙個例項 保證...