实现方式
// 创建静态对象
static VPLoginService * service = nil;
@interface VPLoginService()
// 提供静态方法 访问静态对象
+(instancetype)loginService
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
service = [[self alloc] init];
});
return service;
}
// 该方法为申请内存方法 保证只执行一次
// 不能使用new或者alloc int方法,因为会导致死锁
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
service = [super allocWithZone:zone];
});
return service;
}
// 调用copy的方法
-(id)copyWithZone:(NSZone *)zone
{
return service;
}
// 调用mutableCpoy的方法
-(id)mutableCopyWithZone:(NSZone *)zone {
return service;
}
说明
1.想要保证唯一性,就必须保证内存中只有一份数据,
2.重复调用 alloc] init]、new]、copy]、mutableCopy]的时候返回的对象必须是同一个
3.申请对内存的方法是+(instancetype)allocWithZone:(struct _NSZone *)zone,所以要保证该方法申请内存的操作只执行一次
4.自定义的静态方法+(instancetype)loginService,也只需要执行一次创建对象的操作
网友评论