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