線程安全的單例
什么是單例?
在軟件工程學(xué)中,單例模式是一種設(shè)計模式用于實現(xiàn)數(shù)學(xué)上的單元素集合的概念诫硕,它是通過將一個類的實例限定到唯一的一個對象來實現(xiàn)的祠饺。
單例模式是指系統(tǒng)中對某個類只能有一個對象,不會出現(xiàn)第二個對象.
實現(xiàn)單例模式的三個必要條件:
- 類的構(gòu)造方法是私有的
重寫allocWithZone 方法, 讓初始化操作只執(zhí)行一次 - 類中提供一個類方法用于產(chǎn)生對象
直接定義一個類方法 - 類中有一個私有的自己對象
.m 中定義一個屬性
Grand Central Dispatch (GCD) (在 Mac OS 10.6 和 iOS 4.0 之后)非常適合用于實現(xiàn)單例設(shè)計模式伍俘。
+ (ViewController *)shareInstance
{
// 不允許外部訪問, 同時存放在靜態(tài)區(qū)中.
static ViewController *instance = nil;
// 只會被調(diào)用一次, 讓他只能初始化一次
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
instance = [[self alloc] init];
});
return instance;
}
當(dāng)你需要訪問這個實例時
ViewController *vc = [ViewController shareInstance];
優(yōu)點:
- 安全
- 兼容 ARC
- 代碼量少
缺點: 同時允許創(chuàng)建非共享的實例
ViewController *vc = [[ViewController alloc] init];