1.注意:
如果不重写allocWithZone和copyWithZone的话,在调用alloc和init时,会创建除单利对象外的另一个对象,这个可以通过打印对象的内存地址观察,所以注意需要复写这两个方法。
2.代码演示:
/**
* 创建单例
*/
static locationManager *instance;
+ (instancetype)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init] ;
}) ;
return instance;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [super allocWithZone:zone] ;
}) ;
return instance;
}
- (id)copyWithZone:(NSZone *)zone
{
return instance;
}