zoukankan      html  css  js  c++  java
  • 两种单例方式的对比

    1.加互斥锁的单例(因为在多线程的情况下,不枷锁的情况线程是不安全的)
    + (instancetype)shaerdNetTool;
    
    // 实现
    + (instancetype)shaerdNetTool{
        
        static NetToll *tool = nil;
        
        @synchronized(self) {
            
            if (tool == nil) {
                
                tool = [NetToll new];
            }
            
        }
        return tool;
    }
    2.通过GCD的一次执行 (一次执行线程是安全的,整个运行过程只执行一次)
    // 声明
    + (instancetype)shaerdNetTooOncel;
    
    // 实现
    + (instancetype)shaerdNetToolOnce{
        
         static NetToll *tool = nil;
        if (tool == nil) {
            
            static dispatch_once_t onceToken;
            dispatch_once(&onceToken, ^{
                
                tool = [NetToll new];
            });
        }
        return tool;
        
    }
    比较效率
    
    
     CFAbsoluteTime time1 = CFAbsoluteTimeGetCurrent();
        for (int i =0; i<100000; i++) {
            
            [NetToll shaerdNetToolOnce];
        }
        NSLog(@"%f",CFAbsoluteTimeGetCurrent()-time1);
        
        CFAbsoluteTime time2 = CFAbsoluteTimeGetCurrent();
        for (int i =0; i<100000; i++) {
            
            [NetToll shaerdNetTool];
        }
        NSLog(@"%f",CFAbsoluteTimeGetCurrent()-time2);

  • 相关阅读:
    Luogu P2633 Count on a tree
    Luogu P4011 孤岛营救问题
    Luogu P3157 [CQOI2011]动态逆序对
    SCOI2015 国旗计划
    AT2165 Median Pyramid Hard
    BZOJ2959 长跑
    SCOI2015 情报传递
    SDOI2011 染色
    SCOI2010 幸运数字
    SHOI2016 黑暗前的幻想乡
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5249187.html
Copyright © 2011-2022 走看看