標準的單例方法

2021-07-05 04:49:15 字數 1063 閱讀 7546

標準的單例方法需要重寫 copywithzone,allocwithzone,init,確保以任何方式建立出來的物件只有乙個。

乙個單例建立不嚴格造成了的問題。簡單說來就是在有的地方使用了alloc建立了多個例項,當然如果嚴格按照介面的方法呼叫是不會有問題的,但是如果專案碰到有不太熟悉的人使用時在處理時就會出現使用其它的方法來建立例項,比如說用alloc,這樣本打算使用相同的乙個例項成了多個而達不到做這個模式的目的。

關於單例模式的實現主要是static呼叫後儲存空間不釋放的特性使得例項在程式的生命週期中保持唯一,根據這個特點,如果要解決前面的問題,可以在allocwithzone裡呼叫介面sharinstance方法,在copywithzone裡直接返回例項,具體實現如下:

@implementation xnsharetool

/** 步驟:

1.乙個靜態變數_inastance

2.重寫allocwithzone, 在裡面用dispatch_once, 並呼叫super allocwithzone

3.自定義乙個sharedxx, 用來獲取單例. 在裡面也呼叫dispatch_once, 例項化_instance

-----------可選------------

4.如果要支援copy. 則(先遵守nscopying協議)重寫copywithzone, 直接返回_instance即可.

*//**第1步: 儲存唯一例項*/

static xnsharetool *_instance;

/**第2步: 分配記憶體孔家時都會呼叫這個方法. 保證分配記憶體alloc時都相同*/

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

return _instance;

}/**第3步: 保證init初始化時都相同*/

+(instancetype)sharedtool);

return _instance;

}/**第4步: 保證copy時都相同*/

-(id)copywithzone:(nszone *)zone

@end

ruby的單例方法

begin 在ruby裡,可以給具體的例項物件新增例項方法,這個方法只屬於這個例項 物件,我們把這樣的方法稱之為單例方法。單例方法也叫作單件方法。定義單例方法,首先要生成乙個例項物件,其次,要在方法名前加上物件名和乙個點號 在下面示例中,物件p1不可以laugh laugh方法只屬於p2物件。例項方...

ruby的單例方法

begin 在ruby裡,可以給具體的例項物件新增例項方法,這個方法只屬於這個例項 物件,我們把這樣的方法稱之為單例方法。單例方法也叫作單件方法。定義單例方法,首先要生成乙個例項物件,其次,要在方法名前加上物件名和乙個點號 在下面示例中,物件p1不可以laugh laugh方法只屬於p2物件。例項方...

單例 ,真正的單例

單例模式是24種設計模式中的一種,給人的第一反應是乙個類只有乙個例項,非常好理解。單例模式的優點是減少記憶體開銷,避免資源的多重占用,提供全域性訪問點,嚴格控制訪問,也有缺點沒有介面擴充套件困難。單例模式應用也非常的廣泛,string,mybatis等框架中都有大量的運用。大家也很熟悉什麼懶漢模式,...