Swift - 单例的创建方法

在爪哇中的单例定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供

class singleClass: NSObject {
    var value = 0
    
    //方式一 全局变量
   static let singleDefault = singleClass()
    
    //方式二 使用GCD -> 单例
   class func shareDefault() -> singleClass {
        struct once {
            static var onceToken: dispatch_once_t = 0
            static var shareSingle:singleClass! = nil
        }
        dispatch_once(&once.onceToken) {
            once.shareSingle = singleClass()
        }
        return once.shareSingle
    }
    
    //方式三 使用结构体 -> 单例
   class func shareDefault2() -> singleClass {
        struct single {
            static var singleDefault = singleClass()
        }
        return single.singleDefault
    }
    
    private override init() {} //防止被再次实例化
}
/*
let single1 = singleClass.singleDefault
let single2 = singleClass.shareDefault()
let single3 = singleClass.shareDefault2()

单例

使用例子:比如在游戏中都有唯一一个游戏管理者统一管理加分之类的,多个的话就会出现数据不同步混淆混乱等

GameManager.Swift

public class GameManager {
    
    public var score = 0
    
    public static let defaultGameManager = GameManager()
    private init() { } //防止被初始化
    
    public func addScore() {
        score += 10
    }
}

-> 下面 gm1 与 gm2 都是指向同一个实例(相对于它的花名),并没有创建新的实例

let gm1 = GameManager.defaultGameManager
gameManager.addScore()
gameManager.score
// = 10

let gm2 = GameManager.defaultGameManager
gm.addScore()
gm.score

// = 20
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 斯达尔夫人社会批评观认为文学与其所依附的自然环境和广义的社会制度密切相关。她在《论文学》中明确指出广义的社会制度涉...
    简书穆清阅读 1,379评论 14赞 45
  • 今天重温了电影《中国合伙人》,这部电影已经看了五六遍了,甚至像胖哥说的有些台词都能倒背如流了吧,但还是喜欢,我觉得...
    丿子木丨阅读 261评论 0赞 0
  • 朵朵葵花笑向阳,白云喜景舞飞扬。 晨钟醒起寻光影,旭日东升阔步昂。 意切情深心驻爱,朝朝暮暮念一生。 青天抚育温馨...
    六月天气阅读 672评论 24赞 27
  • 这是笔者第三篇写关于红酒的文章,前两篇分别介绍了葡萄酒术语和红酒杯挑选,相信对于红酒都有所了解,那么重要的来了,作...
    清听阅读 1,035评论 0赞 5

友情链接更多精彩内容