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);

  • 相关阅读:
    vijos 1426
    2455 繁忙的都市
    2104 删除物品
    3235 战争
    BZOJ 2962
    COGS 265 线段覆盖
    P2184 贪婪大陆
    0729模拟赛解题报告
    BZOJ 1012
    BZOJ 2763
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5249187.html
Copyright © 2011-2022 走看看