2014-07-31 3 views
8

Ich habe eine Menge Vorschläge für den richtigen Ort gelesen, um .removeObserver für NSNotificationCenter aufzurufen, da viewDidUnload keine Option ist.Der richtige Ort, um .removeObserver für NSNotificationCenter aufzurufen = Swift deinit()?

Ich habe mich nur gefragt, ob das neue deinit() in Swift eine gute Wahl wäre?

-Nick

+0

viewDidUnload war nie eine Option. Wann fügst du den Beobachter hinzu? – jrturton

+0

Bin mir auch nicht sicher. Mein Darm sagt viewDidLoad, aber einige scheinen zu denken, Pairing viewWillAppear zum Hinzufügen und viewWillDisappear zum Entfernen. Andere haben erklärt, dass dealloc ein guter Ort zum Entfernen wäre. Ich dachte nur, das Entfernen in Deinit(), da die Klasse getötet wird, könnte eine gute Wahl sein. – nick

Antwort

10

Es ist wirklich auf die Rolle der Klasse abhängt, in dem Sie NSNotificationCenter Benachrichtigungen abonnieren. Wenn Sie Ihre Anmeldung an:

UIView

Dann sollten Sie so schnell abmelden als Ansicht für den Benutzer unsichtbar wird. So sparen Sie CPU-Zyklen und verbrauchen keine Ressourcen, während der Benutzer die Ansicht nicht sieht.

UIViewController

Hier hängt es auch von der Art der Aktion, die Sie als Antwort auf Benachrichtigung ausführen werden. Wenn es sich nur um eine UI-Anpassung handelt, sollten Sie sich abmelden, sobald der View-Controller vom Bildschirm verschwindet.

Sie App-Service-Schicht

Hier ist es OK .removeObserver innerhalb deinit zu haben(). Aber auch hier neige ich dazu, Ihnen zu empfehlen, genauer zu sein, wenn Sie die NSNotificationCenter Benachrichtigungen abonnieren und abbestellen und sie in Start- und Stopp-Methoden Ihres Dienstes einfügen.

+0

Danke Keenie. Das hilft. Ich beobachte nur ein Textfeld in einem View-Controller, also denke ich, dass die Methoden viewwillAppear und viewWillDisappear auf jeden Fall die richtige Wahl sind. Prost. – nick