单例就是project中仅仅初始化一次,节省内存空间。或者共享资源。比如在创建蓝牙类,或者做WiFi通信时经经常使用到。也能够用来传值。
一下介绍两种创建单例的方法
一,考虑线程安全的写法
/**
* 考虑线程安全的写法
*
* @return ModelTool对象
*/
+(instancetype)shareModel{
static ModelTool *model = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
model = [[self alloc] init];
});
return model;
}
二,不考虑线程安全的写法
/**
* 不考虑线程安全的写法
*
* @return ModelTool的对象
*/
+(instancetype)shareModelTool{
static ModelTool *model = nil;
if (!model) {
model = [[ModelTool alloc] init];
}
return model;
}
三,測试这两种写法
- (void)viewDidLoad {
[super viewDidLoad];
//1.0考虑线程安全的
ModelTool *tool1 = [ModelTool shareModel];
ModelTool *tool2 = [ModelTool shareModel];
ModelTool *tool3 = [ModelTool shareModel];
NSLog(@"tool1 == %@ tool2 == %@ tool3 == %@",tool1,tool2,tool3);
//2.0不考虑线程安全
ModelTool *t1 = [ModelTool shareModelTool];
ModelTool *t2 = [ModelTool shareModelTool];
ModelTool *t3 = [ModelTool shareModelTool];
NSLog(@"t1 == %@ t2 == %@ t3 == %@",t1,t2,t3);
}
四。打印结果
2016-03-08 14:26:43.996 单例设计模式[2144:779656] tool1 == <ModelTool: 0x7fb3f1412d20> tool2 == <ModelTool: 0x7fb3f1412d20> tool3 == <ModelTool: 0x7fb3f1412d20>
2016-03-08 14:26:43.997 单例设计模式[2144:779656] t1 == <ModelTool: 0x7fb3f15263d0> t2 == <ModelTool: 0x7fb3f15263d0> t3 == <ModelTool: 0x7fb3f15263d0>
两种方法都保证了创建了,一块内存空间。