iOS kann Benachrichtigungsbeobachter nicht entfernen. Deinit wird nicht angerufen

8

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. :)

    
Sohil Pandya 12.05.2017, 11:05
quelle

2 Antworten

4

Ich habe festgestellt, dass removeObserver () nur funktioniert, wenn Sie diese Version von addObserver () verwenden

%Vor%

Ich vermute mit der Originalfassung, dass Sie nicht wirklich angeben, wer der Beobachter ist.

    
Spads 12.05.2017, 12:49
quelle
1

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%     
Khalid Afridi 12.05.2017 13:58
quelle