我這人懶慣了十办,今天心血來潮來聊一聊單例設(shè)計模式霉颠,為什么會想到了它呢艺谆,因為今天面試被雷到了尾抑!其實我面過很多人,仿佛大家都知道怎么用罚缕,可為什么用烧栋,似乎都不很明白芦瘾。這就是打算寫一點的原因。
其實知識點比較少的扔涧,可是大家都不曾注意能真,似乎懂了,其實不然扰柠!就像大家都知道的一樣粉铐,單例設(shè)計模式只會在內(nèi)存中生成一次,程序不退出就不會被釋放卤档◎茫可是為什么呢?那就用下面的代碼來解釋吧:
- (AccountManager *)sharedManager
{
static AccountManager * sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
因為修飾當(dāng)前對象用的是 static 關(guān)鍵字劝枣,所以此對象不會釋放汤踏,除非程序退出!因為 用到了 dispatch_once 所以不會再此創(chuàng)建舔腾!這才是根本原因溪胶!
至于什么時候用呢,那必須是頻繁使用的對象才會去用(就比如一款拍照社交的軟件稳诚,拍照部分就可以用這個設(shè)計模式創(chuàng)建對象,避免重復(fù)創(chuàng)建哗脖,造成不必要的浪費),不得不用的時候才回去用(就比如后臺下載)。
若有不對的地方才避,敬請指點和指指點點橱夭!要是覺得還可以的話,請點贊收藏桑逝!