iOS 開發之單例模式
阿新 • • 發佈:2017-08-11
ack pop sel del 結果 通信 方法 ret article
二,不考慮線程安全的寫法
三,測試這兩種寫法
四。打印結果
兩種方法都保證了創建了,一塊內存空間。
單例就是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>
兩種方法都保證了創建了,一塊內存空間。
iOS 開發之單例模式