2015-11-04 14 views
9

Come distruggere un Singleton in rapida

creo un singleton come questo:Come destory un Singleton in rapida

class MyManager { 
    private static let sharedInstance = MyManager() 
    class var sharedManager : MyManager { 
     return sharedInstance 
    } 
} 
+0

Cosa intendi con "distruggi"? La memoria viene automaticamente gestita da ARC (Automatic Reference Counting). Non è necessario tenere traccia della memoria utilizzata dalle variabili e non è necessario rilasciare manualmente la memoria che utilizzano. – Arc676

+2

@ Arc676, non proprio. Questo è un metodo statico, ARC non lo ucciderà mai. Devi forzarlo per ricostruire. – Brduca

+1

se è necessario distruggere esplicitamente l'istanza e assegnarne una nuova, basta cambiare 'let' a' var' e implementare un metodo che assegna un altro MyManager() ad esso, e l'istanza precedente verrà raccolta dalla modifica di ARC – cezheng

risposta

21

Basta un semplice esempio su come smaltire l'istanza corrente di un 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() 

Spero che possa essere d'aiuto.

+0

se si usa var in 'private var static instance: AnyTestClass?', Può essere thread safe? – Dennis

+0

Non proprio. Per renderlo thread-safe è necessario utilizzare il dispatch_once, lo blocco fino a quando non viene creato. http://stackoverflow.com/questions/24024549/dispatch-once-singleton-model-in-swift – Brduca

+0

Dennis, segna la tua domanda come risolta in caso affermativo. – Brduca

4

Si non distruggere un singleton. Un singleton viene creato la prima volta che qualcuno ne ha bisogno, e non viene mai distrutto finché dura l'applicazione.