2012-10-27 12 views
9

Ho una classe singleton che accumula i dati finché questi dati non vengono scritti nel mio database (se si desidera sapere perché sto implementando le cose in questo modo, vedere here). Dopo aver salvato i dati, vorrei distruggere il singleton. Come posso farlo in ARC? O sono paranoico e devo assolutamente distruggerlo?iOS: Come posso distruggere un Singleton in ARC? Dovrei?

* Si potrebbe dire che questo è un duplicato di this domanda, ma la risposta accettata qui non è abbastanza specifica per essere utile. Dice "Puoi dichiarare un metodo/una funzione che chiami esplicitamente." Quale potrebbe essere il codice per questo aspetto? Se non riesco a rilasciare l'oggetto al di fuori di un metodo, come posso estrarlo all'interno di un metodo? Dice anche "Il modo più semplice è di tenere una classe C++ statica, quindi rilasciarla nel suo distruttore." Non conosco il C++, ma puoi davvero inserire una classe C++ nel codice della tua app?

mio Singleton è implementata in questo modo:

+(NHCFamilyStatus *)familyStatus 
{ 
    static dispatch_once_t pred; 
    static NHCFamilyStatus *familyStatusSharedObject=nil; 

    dispatch_once(&pred,^
    { 
     familyStatusSharedObject = [[NHCFamilyStatus alloc] init]; 
    }); 

    return familyStatusSharedObject; 
} 
+1

[Questo post vi aiuterà, si prega di fare riferimento ad esso come implementare correttamente il Singleton] [1] [1]: http://stackoverflow.com/questions/7598820/correct-singleton- pattern-objective-c-ios – chrislhardin

+0

Perché si distrugge il singleton e non solo il buffer contenente i dati? – Jano

+0

@Jano Potresti spiegare come posso distruggere quel buffer? – cmac

risposta

19

Se distruggi questo Singleton, non sarete mai in grado di creare di nuovo (questo è ciò che significa la chiamata dispatch_once).

Non è necessario per distruggere il singleton. Con tutti i mezzi, c'è un metodo sul singleton che rimuove qualsiasi variabile di istanza di cui non hai più bisogno, ma non c'è bisogno di fare altro.

+0

Oops, ovviamente (richiesta: dispatch_once). Perdonami, annullare le variabili di istanza è utile soprattutto perché libererà la memoria? – cmac

+0

Sì, ripristina anche lo stato da quando hai salvato i dati su cui stavi lavorando. – jrturton

+0

@jrturton Non posso dire se la tua risposta dice che è possibile o no distruggere un oggetto singleton. Dici "Non puoi distruggere questo singleton" e poi vai avanti per dire "Non hai bisogno di distruggere il singleton". La mia esperienza con loro è che è possibile distruggerli, solo inusuale per avere un tale bisogno e, come hai detto tu, non puoi ricrearlo se è stato inizialmente creato all'interno di un dispatch_once(). Sto solo cercando di ottenere una risposta diretta, non ti sto sfidando :) – pnizzle

Problemi correlati