有的时候,我们需要一个类只要初始化一次就够了,比如音频播放器这种实例,因此需要我们使用单例,熟悉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(){} }