How to destroy a singleton in Swift

后端 未结 3 1507
情书的邮戳
情书的邮戳 2020-12-28 17:38

How to destroy a singleton in Swift?

I create a singleton like this:

class MyManager  {
    private static let sharedInstance = MyManager()
    cla         


        
相关标签:
3条回答
  • 2020-12-28 17:49

    You don't destroy a singleton. A singleton is created the first time anyone needs it, and is never destroyed as long as the application lives.

    0 讨论(0)
  • 2020-12-28 18:06

    If you want to be able to destroy it, make it an optional. And don't use ! to force unwrap like in brduca answer: it wouldn't be thread safe. This answer is safer:

    class MyManager  {
        private static var sharedInstance: MyManager?
        class var sharedManager : MyManager {
            guard let sharedInstance = self.sharedInstance else {
                let sharedInstance = MyManager()
                self.sharedInstance = sharedInstance
                return sharedInstance
            }
            return sharedInstance
        }
        class func destroySharedManager() {
            sharedInstance = nil
        }
    }
    

    Basic usage:

    // do something with singleton
    AnyTestClass.sharedManager.doSomething()
    // destroy singleton
    AnyTestClass.destroySharedManager()
    // do something with new singleton
    AnyTestClass.sharedManager.doSomething()
    
    0 讨论(0)
  • 2020-12-28 18:15

    Just a simple example on how to dispose the current instance of a Singleton:

    import UIKit
    
    class AnyTestClass
    {
        struct Static
        {
            private static var instance: AnyTestClass?
        }
    
        class var sharedInstance: AnyTestClass
        {
            if Static.instance == nil
            {
                Static.instance = AnyTestClass()
            }
    
            return Static.instance!
        }
    
        func dispose()
        {
            AnyTestClass.Static.instance = nil
            print("Disposed Singleton instance")
        }
    
        func saySomething()
        {
            print("Hi")
        }
    
    }
    
    // basic usage
    AnyTestClass.sharedInstance.saySomething()
    AnyTestClass.sharedInstance.dispose()
    

    Hope it might help.

    0 讨论(0)
提交回复
热议问题