zoukankan      html  css  js  c++  java
  • Swift中的dispatch_once 单例模式

    以下有三种方法实现单例模式,支持懒初始化和线程安全

    • 全局变量
    • 结构
    • dispatch_once

    全局变量:

    这里使用了全局变量而非类变量,是因为不支持类变量

    private let _SingletonSharedInstance = Singleton()
    
    class Singleton  {
        class var sharedInstance : Singleton {
            return _SingletonSharedInstance
        }
    }
    

     结构:

    与类不同,结构可以定义静态变量,通过使用此方法,将静态变量升级为类变量(在支持类变量之前,推荐此方法)

    class Singleton {
        class var sharedInstance : Singleton {
            struct Static {
                static let instance : Singleton = Singleton()
            }
            return Static.instance
        }
    }
    

    dispatch_once:

    传统的OC方法对Swift的接口

    class Singleton {
        class var sharedInstance : Singleton {
            struct Static {
                static var onceToken : dispatch_once_t = 0
                static var instance : Singleton? = nil
            }
            dispatch_once(&Static.onceToken) {
                Static.instance = Singleton()
            }
            return Static.instance!
        }
    }
    

    本文对原文进行整理、翻译

    原文链接

  • 相关阅读:
    timerfd与eventfd
    boost--asio
    boost--线程
    boost--线程同步
    C++11--lambda表达式
    Java数据类型中String、Integer、int相互间的转换
    Jsoup网页抓取
    线程池
    Java
    用cmd来向mysql导入sql文件
  • 原文地址:https://www.cnblogs.com/sparks/p/3989241.html
Copyright © 2011-2022 走看看