• 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() {

            

        }

    }

  • 相关阅读:
    Linux系统负载
    full nat
    close wait 状态的随想
    记录一下 性能分析问题
    golang 反射
    socket里面那个又爱又恨的锁
    Difference between skbuff frags and frag_list
    浅析TCP协议---转载
    http 怎样关闭
    http 响应 ngx_http_send_header ngx_http_output_filter
  • 原文地址:https://www.cnblogs.com/shidaying/p/4773457.html
Copyright © 2020-2023  润新知