1. 程式人生 > >iOS 開發之單例模式

iOS 開發之單例模式

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 開發之單例模式