How to destroy a singleton in Swift?
I create a singleton like this:
class MyManager {
private static let sharedInstance = MyManager()
class var sharedManager : MyManager {
return sharedInstance
}
}
I create a singleton like this:
class MyManager {
private static let sharedInstance = MyManager()
class var sharedManager : MyManager {
return sharedInstance
}
}
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.
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()
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.