如何在Swift中摧毁一个单身人士

Den*_*nis 15 singleton swift

如何在Swift中销毁单身人士?

我创建一个像这样的单例:

class MyManager  {
    private static let sharedInstance = MyManager()
    class var sharedManager : MyManager {
        return sharedInstance
    }
}
Run Code Online (Sandbox Code Playgroud)

brd*_*uca 33

只是一个关于如何处理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()
Run Code Online (Sandbox Code Playgroud)

希望它可能有所帮助.

  • @brduca,对于 swift 3 及更高版本,您需要用 `fileprivate` 替换 `private` 访问修饰符 (4认同)

Cœu*_*œur 8

如果您希望能够销毁它,请将其设为可选。并且不要!像在 brduca 答案中那样使用强制解包:它不是线程安全的。这个答案更安全:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

基本用法:

// do something with singleton
AnyTestClass.sharedManager.doSomething()
// destroy singleton
AnyTestClass.destroySharedManager()
// do something with new singleton
AnyTestClass.sharedManager.doSomething()
Run Code Online (Sandbox Code Playgroud)


gna*_*729 6

破坏单身人士.单例是在任何人第一次需要时创建的,并且只要应用程序存在就永远不会被销毁.