iOS常用设计模式-单例模式

发表于:2015-8-26 10:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ya了个hoo    来源:51Testing软件测试网采编

  一个完美的单例模式的实现方式
  不推荐直接使用:XXXClass *obj = [XXXClass [alloc] init];方式获取单例对象
  建议直接使用shareInstance获取单例对象,这样跟官方统一
  代码实现方式
/**
*  全局的static的实例,直到程序退出才被销毁
*/
static id _instance;
/**
*  控制只分配一份内存空间,alloc方法会调用这个方法来分配内存
*/
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
_instance = [super allocWithZone:zone];
});
return _instance;
}
/**
*  控制只初始化一次,保证[[xxx alloc] init]也是唯一的对象
*/
-(instancetype)init
{
__block typeof(self) onceSelf = self;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
onceSelf = [super init];
if(onceSelf)
{
// 自定义初始化代码
}
});
return onceSelf;
}
/**
*  提供一个类方法供外界快速获取单例对象
*/
+(instancetype)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
_instance = [[self alloc] init];
});
return _instance;
}
/**
*  控制拷贝对象也是同一个示例,可以不遵守<NSCopying>协议
*/
-(id)copyWithZone:(NSZone *)zone
{
return _instance;
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号