單例模式設定思想:可以保證程式在執行過程中,乙個類只有乙個例項(乙個物件)。 步驟
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的方法,用來得到定義類的例項。當然,在定義類的內部需要初始化來建立自身的乙個例項 保證...