單例模式:建立單例對象的兩種方式
方式一:iOS4版本之前
static SingleClassManager *singleManager = nil;
+(SingleClassManager*)sharedManager
{
@synchronized(self) //同步加鎖,在多線程中使用,可以使線程安全
{
if(singleManager == nil)
{
singleManager = [[SingleClassManager alloc]init];
}
}
return singleManager;
}
方式二:iOS5版本開始(block函數)
+(SingleClassManager *)sharedManager
{
static SingleClassManager *singleManager = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate,^{
singleManager = [[SingleClassManager alloc]init];
});
return singleManager;
}
該方法有很多優勢:
1 線程安全
2 很好滿足靜态分析器要求
3 和自動引用計數(ARC)相容
4 僅需要少量代碼
說明:
該函數接收一個dispatch_once用于檢查該代碼塊是否已經被排程的謂詞(是一個長整型,實際上作為BOOL使用)。它還接收一個希望在應用的生命周期内僅被排程一次的代碼塊,對于本例就用于shared執行個體的執行個體化。
dispatch_once不僅意味着代碼僅會被運作一次,而且還是線程安全的,這就意味着你不需要使用諸如@synchronized之類的來防止使用多個線程或者隊列時不同步的問題。
程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!
本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4856387.html,如需轉載請自行聯系原作者