2013-05-03 16 views
9

Sto cercando di creare un certo codice di pulizia nella mia classe Objective-C, per dealloc sovrascrivendo:Objective-C distruttore con ARC

-(void)dealloc { 
    //cleanup code 
    [super dealloc]; 
} 

Anche se non posso fare questo in quanto [super dealloc] non è consentita dal compilatore quando ARC è abilitato. C'è un'alternativa che posso usare?

risposta

22

Dal Transitioning to ARC Release Notes (sottolineatura mia):

Si può implementare un metodo dealloc se avete bisogno di gestire le risorse diverse da rilasciare variabili di istanza. Non è necessario (anzi non è possibile) rilasciare variabili di istanza, ma potrebbe essere necessario richiamare [systemClassInstance setDelegate: nil] su classi di sistema e altro codice non compilato utilizzando ARC.

I metodi dealloc personalizzati in ARC non richiedono una chiamata a [super dealloc] (in realtà risulta in un errore del compilatore). Il concatenamento a super è automatizzato e applicato dal compilatore.

Così si può fare lo stesso tipo di pulizia in dealloc quando si utilizza ARC, basta non chiamare super.

5

Quando ARC è attivo, non chiamare semplicemente [super dealloc]. ARC lo farà per te. In alternativa, è possibile avere un metodo prepareForDealloc che consente di chiamare super e che viene chiamato dall'interno di dealloc nella classe base.