自定义单例模式需要重写allocWithZone 方法:
//创建一个静态变量
static id instance;
// 重写类方法 不适合多线程
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
// 1.判断instance变量是否为nil,如果是nil,表示从来没有创建过该对象,那么久创建一个
if (instance == nil)
{
// 调用父类方法allocWithZone来创建一个对象
instance = [super allocWithZone:zone];
}
// 2. 如果不是nil 就直接取出来
return instance;
}
// 重写类方法
适合多线程的方法
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 调用父类方法allocWithZone来创建一个对象
instance = [super allocWithZone:zone];
});
// 如果不是nil 就直接取出来
return instance;
}
懒汉模式:需要时加载
饿汉模式:在类的load方法加载时直接初始化: