zoukankan      html  css  js  c++  java
  • swift 创建单例模式

    一、意图

    保证一个类公有一个实例,并提供一个访问它的全局访问点。

    二、使用场景

    1、使用场景

    • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
    • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

    2、实现的重要三个步骤

    • 私有化构造方法(Swift不支持)
    • 使用一个静态变量保存实例的引用 
    • 提供一个全局的访问方法

     三、 Swift语言下的实现

    Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例。单例的创建有很多写法,Swift支持只有struct支持静态变量,class不支持静态变量,所以很容易想到,在类的内部使用struct就能解决引用的保存问题,代码如下:

    class GlobalData: NSObject {
        struct Inner {
            static var instance: GlobalData?
            static var token: dispatch_once_t = 0
        }
        class var sharedInstance: GlobalData {
            dispatch_once(&Inner.token, { () -> Void in
                if Inner.instance == nil {
                    Inner.instance = GlobalData()
                }
            })
            return Inner.instance!
        }
    }


    class FirstSingleton: NSObject {

        private static let _singleSharedInstance = FirstSingleton()

        class func sharedInstance() -> FirstSingleton {

            return _singleSharedInstance

        }

        private override init() {

            

        }

    }

    class SecondSingleton: NSObject {

        static let sharedInstance = SecondSingleton()

        private override init() {

            

        }

    }

  • 相关阅读:
    Mac 安装FFMpeg 与 FFmpeg 格式转换
    django channels
    python3 coroutine
    python中关于sql 添加参数
    python导包的问题
    python中的列表
    django中用model生成数据库表结构
    docker
    博客大神地址
    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
  • 原文地址:https://www.cnblogs.com/shidaying/p/4773457.html
Copyright © 2011-2022 走看看