有的時候,我們需要一個類只要初始化一次就夠了,比如音頻播放器這種實例,因此需要我們使用單例,熟悉C++和OC都知道該怎么寫
class CSingleton /* 懶漢式 */
{
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判斷是否第一次調用
m_pInstance = new CSingleton;
return m_pInstance;
}
void RelaseInstance()
{
delete this;
}
private:
CSingleton() //構造函數是私有的
{
}
CSingleton(const CSingleton& that)//拷貝構造函數也應是私有的
{
}
~CSingleton()
{
m_pInstance = NULL;
}
static CSingleton *m_pInstance;
};
+(SingalClass*)shareInstance //單例都使用+號,下面的都可以寫成宏調用
{
//利用GCD創建一個單例模式
//第一個參數predicate,該參數是檢查后面第二個參數所代表的代碼塊是否被調用的謂詞,第二個參數則是在整個應用程序中只會被調用一次的代碼塊。dispach_once函數中的代碼塊只會被執行一次,而且還是線程安全的。
static dispatch_once_t once;
dispatch_once(&once, ^{
single=[SingalClass alloc];
});
return single;
}
Swfit更簡單了:
class SwiftySingleton {
static let shared = SwiftySingleton() // “懶實例化”的全局變量會被自動放在dispatch_once塊中[4]
private init(){}
}
