您的位置:首页 > 移动开发 > IOS开发

IOS学习 GCD 单例模式 一次性执行 涉及记录时间,计算时差

2016-04-05 23:17 423 查看
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{

CZConfig *config1 = [[CZConfig
alloc]init];

NSLog(@"config1 %@",config1);

CZConfig *config2 = [[CZConfig
alloc]init];

NSLog(@"config2 %@",config2);

CZConfig *config3 = [CZConfig
config];

NSLog(@"config3 %@",config3);

CZConfig *config4 = [CZConfig
config];

NSLog(@"config4 %@",config4);

CZConfig *config5 = [CZConfig
configSync];

NSLog(@"config5 %@",config5);

CZConfig *config6 = [CZConfig
configSync];

NSLog(@"config6 %@",config6);

[self
demo];

}

//多线程测试

-(void)demo{

//dispatch_once

double time1 =
CFAbsoluteTimeGetCurrent();
//记录开始时间

for (int i =
0; i <999*999; i++) {

dispatch_async(dispatch_get_global_queue(0,
0), ^{

CZConfig *config7 = [CZConfig
config];

});

}

double time2 =
CFAbsoluteTimeGetCurrent();
//记录结束时间

NSLog(@"dispatch_once %f",time2-time1);

//同步锁

double time3 =
CFAbsoluteTimeGetCurrent();
//记录开始时间

for (int i =
0; i <999*999; i++) {

dispatch_async(dispatch_get_global_queue(0,
0), ^{

CZConfig *config8 = [CZConfig
configSync];

});

}

double time4 =
CFAbsoluteTimeGetCurrent();
//记录结束时间

NSLog(@"同步锁 %f",time4-time3);

}

@interface CZConfig : NSObject

+(instancetype)config;

+(instancetype)configSync;

@end

@implementation CZConfig

+(instancetype)config{

static
CZConfig *instance;

//一次性执行

static
dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

instance = [[CZConfig
alloc]init];

});

return instance;

}

+(instancetype)configSync{

static
CZConfig *instance;

//同步锁

@synchronized(self) {

if (instance ==
nil) {

instance = [[CZConfig
alloc]init];}

}

return instance;

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: