-(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