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

  • 相关阅读:
    三、Oracle 查询+where条件
    二、Oracle 数据库基本操作
    一、Oracle 安装
    18.JAVA经典编程题(50题及答案)
    17.网络编程
    16.xml
    Js模块化开发--seajs和gruntJs
    git命令行指南
    nodejs学习笔记---1
    面向对象及组件开发---笔记1
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5249187.html
Copyright © 2011-2022 走看看