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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值