Swift线程安全的单例实现

前端之家收集整理的这篇文章主要介绍了Swift线程安全的单例实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

介绍

  • @H_404_4@单例模式在开发中尤为常见,最大的好处就是内存中只会保留一个对象,节省内存开销,同时便于对象的建立和维护。

  • @H_404_7@

    一个简单的单例

    class Singleton  {
           static let sharedInstance = Singleton()
        }
    • @H_404_4@这个单例,如此的简单那么他是线程安全的吗?答案是—————是!而且他也是懒加载的!原因很简单,let定义的属性本身就是thread safe的,同时static定义的是一个class constant,拥有全局作用域和懒加载特性。Swift的单例实现是不是简单得令人发指?!(当然这是在Swift1.2才支持的)

    • @H_404_4@如果你是Swift1.2以下的你可以这么写

    • @H_404_7@
      class Singleton {
          class var shared: Singleton {
                  return Inner.instance
          }
       
          struct Inner {
              static let instance: Singleton = Singleton()
          }
      }

      用GCD来实现线程安全

      class Singleton {
          class var shared: Singleton {
              if Static.instance != nil{
                  dispatch_once(&Static.onceToken) {
                      Static.instance = Singleton()
                  }
              }
              return Static.instance!
          }
          struct Static {
              static var instance: Singleton?
              static var onceToken: dispatch_once_t = 0
          }    
      }
      • @H_404_4@这个实现大家应该相当熟悉,这里就不再过多介绍了。

      • @H_404_7@

猜你在找的Swift相关文章