美文网首页SwiftSwift
Swift 单例模式 (Singleton)

Swift 单例模式 (Singleton)

作者: 起个p名费劲 | 来源:发表于2020-08-25 10:23 被阅读0次

    严格单例模式

    继承自 NSObject
    class SingletonClass: NSObject {
    
        static let shared = SingletonClass()
        
        // Make sure the class has only one instance
        // Should not init or copy outside
        private override init() {}
        
        override func copy() -> Any {
            return self // SingletonClass.shared
        }
        
        override func mutableCopy() -> Any {
            return self // SingletonClass.shared
        }
        
        // Optional
        func reset() {
            // Reset all properties to default value
        }
    }
    

    静态属性 shared 持有唯一的实例,对外公开。

    重载 init() 方法,使其对外不可见,不可以在外部调用,防止在外部创建实例。

    重载 copy()、mutableCopy() 方法,返回 self,防止在外部复制实例。这里也可以返回 SingletonClass.shared,效果是一样的,因为只有一个实例。只有 shared 能调用 copy()、mutableCopy() 方法,那么 self 就是 shared。写 self,代码比较简洁。

    单例一旦创建,一直持有,不能手动销毁,但可以重置数据。如果需要的话,可以添加一个重置数据的方法 reset()。例如,当前用户退出登录,需要把当前用户实例的所有属性重置为默认值,防止数据错误。

    不继承自 NSObject
    class SingletonClass2 {
        
        static let shared = SingletonClass2()
        
        // Make sure the class has only one instance
        // Should not init outside
        private init() {}
        
        // Optional
        func reset() {
            // Reset all properties to default value
        }
    }
    

    不继承自 NSObject 的类没有 copy()、mutableCopy() 方法,不需要重载。

    相关文章

      网友评论

        本文标题:Swift 单例模式 (Singleton)

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