Ich frage mich, ob es eine gute Praxis ist, eine deinit
auf jedem View-Controller zu implementieren, um zu überprüfen, ob es korrekt entfernt wird, wenn es verschwindet und Speicherverlust zu vermeiden?Deinit ist es eine gute Praxis, es auf ViewControllern zu implementieren?
Antwort
standardmäßig Sie nicht haben die deinit
Methode in Klassen zu implementieren:
Swift automatisch freigibt Ihre Instanzen, wenn sie nicht mehr benötigt, um Ressourcen freizugeben. Swift übernimmt die Speicherverwaltung von Instanzen durch automatische Referenzzählung (ARC), wie in Automatische Referenzzählung beschrieben. In der Regel müssen Sie keine manuelle Bereinigung ausführen, wenn Ihre Instanzen freigegeben werden. Wenn Sie jedoch mit Ihren eigenen Ressourcen arbeiten, müssen Sie möglicherweise einige zusätzliche Bereinigung durchführen. Wenn Sie beispielsweise eine benutzerdefinierte Klasse erstellen, um eine Datei zu öffnen und einige Daten darauf zu schreiben, müssen Sie möglicherweise die Datei schließen, bevor die Klasseninstanz freigegeben wird.
Schnelle Deinitialisierung Dokumentation - How Deinitialization Works Abschnitt.
Normalerweise scheint es bei der Arbeit mit View Controllern so zu sein, dass eine solche Implementierung nicht erforderlich ist. Wie jedoch im Kommentar von @rmaddy erwähnt, ist es immer noch ein Ansatz zum Verfolgen eines Speicherlecks oder eines Referenzzyklus mit dem Ansichtscontroller.
Wenn Sie überprüfen möchten, ob der Controller aus der Hierarchie entfernt wurde (siehe Controller-Lebenszyklus), können Sie die Methoden viewWillDisappear(_:) oder viewDidDisappear(_:) implementieren; Beachten Sie, dass das Aufrufen dieser Methoden nicht garantiert, dass der deinit
aufgerufen wird, d. H. Es bedeutet nicht, dass das Verschwinden des Ansichtscontrollers immer dazu führt, die Zuordnung aufzuheben (bezogen: Deinit never called,).
auch:
diese Q & Wie sollte nützlich sein:
tl; dr - ja, die Verwendung von 'deinit' ist eine Möglichkeit zu überprüfen, dass Sie keinen Speicherleck oder Referenzzyklus mit dem View-Controller haben. – rmaddy
@rpaddy danke für den Hinweis, Antwort aktualisiert. –
Swift weist die Instanzen automatisch zu, wenn sie nicht mehr benötigt werden, um Ressourcen freizugeben. So deinit
auf alle Ihre viewControllers
hinzufügen scheint unnötig. Sie sollten deinit
aufrufen, wenn Sie vor dem Freigeben eines Objekts eine Aktion oder Bereinigung ausführen müssen.
Gut während der Testphase ist es vielleicht eine gute Idee, weil Sie überprüfen können, ob alles gut ist (zB wenn Sie eine Menge Completion Handler haben), aber insgesamt ist es unnötig.
- 1. Ist es eine gute Praxis, Logik in Eigenschaften zu implementieren
- 2. Ist es eine gute Praxis, Variablen möglichst "final" zu deklarieren?
- 3. Ist es eine gute Praxis, libstdC++ static zu verknüpfen?
- 4. Ist es eine gute Praxis, statische Elementvariablen stark zu verwenden?
- 5. Ist es eine gute Praxis, Variablen in Perl zu exportieren?
- 6. Es ist eine gute Praxis, col-xs- * überall zu verwenden?
- 7. Ist es eine gute Praxis, Active_Model_Serializer und Jbuilder zu verwenden?
- 8. ist es eine gute Praxis, Dateideskriptoren beim Beenden zu schließen
- 9. Ist es eine gute Praxis, den Konstruktor explizit zu machen?
- 10. ist es eine gute Praxis, mysql_free_result ($ result) zu verwenden?
- 11. ist eine gute Praxis
- 12. Ist es eine gute Python-Praxis, SystemRandom wiederzuverwenden?
- 13. Ist es eine gute Praxis, die Aktivitätsinstanz in einer WeakReference
- 14. Ist es gute Praxis, exec mit PHP zu verwenden?
- 15. Ist es eine gute Praxis String.toCharArray() in for-Schleife
- 16. Ist es eine gute Praxis, absolut alles zu testen oder es ist Zeitverschwendung (Rails)?
- 17. Ist es gute Praxis, Variablen zu definieren spezifische Bedingungen
- 18. Ist es eine gute Praxis außerhalb Variablen in Methoden
- 19. Fk in verschiedenen Schemata, ist es eine gute Praxis?
- 20. ist es gute Praxis, auf neue Seite in Jquery umleiten
- 21. ist es gute Praxis, CallBacks Redux async Aktion zu übergeben?
- 22. Ist es eine gute Praxis, einen Datensatz zu reduzieren, um eine bessere PCA Dekomposition zu haben
- 23. Ist es gute Praxis, die verfügbaren Optionen für die Entität
- 24. Ist es eine gute Praxis, eine RESTful-Ressource für jede Datenbanktabelle zu haben?
- 25. Warum ist es gute Praxis am Ende eines Verfahrens
- 26. Ist es eine gute Praxis, eine DAO Klasse vergleichbarer Art zu machen
- 27. ist es eine gute Übung, iframe zu verwenden, um header/navbar zu implementieren?
- 28. Ist es eine gute Praxis für eine Js-Datei auf Variablen im einschließlich html
- 29. Ist es eine gute Übung, NSError
- 30. Schienen, ist es eine gute Praxis, eine Methode ohne Sicht zu erstellen?
Definitiv nicht für "etwas überprüfen". Auch für Controller ist es normalerweise sinnvoll, ihre eigenen Lebenszyklusmethoden zu verwenden. – Sulthan
Es ist eine gute Praxis für Testing/Entwicklung/Debugging, aber nicht für die Veröffentlichung. Sobald Sie eine gute "Speicherhygiene" haben, sollten Speicherlecks selten/nicht existent werden. –