Ich habe eine UIView ähnlich der, die Sie unten sehen können:
%Vor%}
Das Problem, das ich habe, ist, dass ich die Beobachter von dieser bestimmten UIView nicht entfernen kann, wenn der Benutzer die Zurück-Schaltfläche drückt und zu einem anderen ViewController zurückkehrt.
ViewWillDisppear
wird aufgerufen, aber deinit
wird nicht aufgerufen. Das Seltsame ist, dass, wenn wir subscribeToNotifications()
von viewDidLoad()
entfernen, der deinit
aufgerufen wird.
Das andere Problem hängt mit einem Speicherverlust zusammen. Wie Sie im folgenden Screenshot sehen können, erhöht sich die Speicherbelegung, wenn die Ansicht Benachrichtigungen abonniert und der Benutzer die Ansicht verlässt bzw. erneut eingibt.
Vergleichen Sie das jetzt, wenn die subscribeToNotifications()
auskommentiert ist, gibt es keinen Anstieg der Speicherauslastung und nur eine Instanz von viewController.
Die Schlussfolgerung ist, dass anscheinend eine Korrelation zwischen der Erstellung der Benachrichtigungssubskription einer neuen Instanz von UIView besteht, daher wird deinit
nicht aufgerufen.
Ich möchte herausfinden, ob wir die Ansicht deinitialisieren und die Benachrichtigung abbestellen können.
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. :)
Wie @Spads sagte, kannst du
verwenden %Vor%oder das, das du bereits hast. Sie können Ihre Benachrichtigung nach ihrem Namen oder ihrer Referenz löschen
%Vor%Wenn Sie Ihre Benachrichtigung oben in Ihrer Klasse deklariert haben, können Sie die Referenz Ihrer zu entfernenden Benachrichtigung in Ihrem Fall direkt übergeben Benachrichtigung
%Vor%Tags und Links memory-leaks ios swift nsnotification deinit