Swift - 单例的创建方法

作者: 小黑Swift | 来源:发表于2016-06-19 15:43 被阅读220次

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

    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

    相关文章

      网友评论

        本文标题:Swift - 单例的创建方法

        本文链接:https://www.haomeiwen.com/subject/eoebdttx.html