有的時候,我們需要一個類只要初始化一次就夠了,比如音頻播放器這種實例,因此需要我們使用單例,熟悉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(){} }