在iOS 中,一般情况下会提供一个单例,供整个App中调用,通用名称为 [类名 sharedXXX].
在多线程的情况下,要保证线程安全或者数据安全,需要加入dispatch_once.
static id _instance;
+ (instancetype) sharedPerson{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc]init];
});
return _instance;
}
此时,通过【类名 sharedxxx】就可以获得这个单例对象。
同时,如果不想使用单例对象,想还可以通过alloc init的方法创建一个新的对象。
如果使整个App 中无论通过何种方式,都只能回创建出同一个对象,需要重写allocWithZone、copy,mutableCopy方法。
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
- (id)copyWithZone:(NSZone *)zone{