在爪哇中的单例定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供
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
网友评论