In Xcode 8, è possibile fare clic sul pulsante "Debug Memory Graph", nella barra degli strumenti di debug (visualizzata nella parte inferiore dello schermo):
Proprio identifica l'oggetto nel pannello di sinistra che ritieni debba essere stato deallocato e ti mostrerà il grafico dell'oggetto (mostrato nella tela principale, sopra). Questo è molto utile per identificare rapidamente dove sono stati stabiliti i riferimenti forti sull'oggetto in questione. Da qui, puoi iniziare la tua ricerca, diagnosticare perché quei forti riferimenti non sono stati risolti (ad esempio se l'oggetto in questione ha un forte riferimento da qualcos'altro che avrebbe dovuto essere deallocato, guarda anche il grafico di quell'oggetto, e potresti trovare il problema (ad es. cicli di riferimento forti, timer ripetuti, ecc.)
Si noti che nel pannello di destra viene visualizzato l'albero delle chiamate.Ho ottenuto che, attivando l'opzione "malloc stack" logging nelle impostazioni dello schema:
In ogni caso, dopo aver fatto questo, si può quindi fare clic sulla freccia accanto alla chiamata di metodo indicata nella pila traccia nel pannello di destra della prima fotografia istantanea dello schermo al di sopra, e si può vedere dove quel forte richiamo è stato originariamente creato:
la tecnica diagnostica di memoria sopra (e non solo) è dimostrato nella seconda parte del WWDC 2016 Visual Debugging with Xcode.
La tecnica strumenti tradizionali (particolarmente utile se si utilizza le vecchie versioni di Xcode) è descritto di seguito, nella mia risposta originale.
Io suggerirei di usare strumenti funzione 'allocazioni' con il 'Record di riferimento conta' caratteristica:
È possibile eseguire l'applicazione in strumenti e poi cercare il tuo classe che si sa è fuoriuscito e drill facendo clic sulla freccia:
È quindi possibile forare i dettagli e guardare la traccia dello stack mediante il pannello "Esteso Dettagli" a destra:
In questo pannello "Esteso Dettagli", si concentrano sul vostro codice in nero piuttosto che il sistema chiama in grigio. In ogni caso, dal pannello "esteso Dettagli", è possibile quindi praticare nel codice sorgente, proprio nel Instruments ::
Per ulteriori informazioni e manifestazioni in utilizzando strumenti di rintracciare problemi di memoria, fare riferimento alla :
non sono sicuro questo è un buon test. Ci può essere da qualche parte nel codice che sta ancora tenendo un puntatore a quelle routine. Oppure il compilatore Swift è abbastanza intelligente da non chiamare 'deinit' se non è necessario. Hai bisogno di un test migliore per la perdita di memoria. – zaph