So entfernen Sie einen Beobachter für NSNotification in einer UIView?
Die ich Hinzugefügt habe, einen Beobachter in einem benutzerdefinierten UIView die ich angelegt habe unter initWithFrame:
.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateZipFromLocation:)
name:@"zipFoundFromLocation"
object:nil];
Das problem ist,, diese Ansicht ist eine Untersicht. Wenn die Ansicht wieder geladen wird, ruft es die initWithFrame Nachricht wieder, so addieren sich zwei Beobachter und so weiter. Wie kann ich entfernen Sie die Beobachter, wenn die Ansicht von der Bildfläche verschwinden? Da es ein UIView
sagt er, dass viewWillDisappear:(BOOL)animated
ist keine gültige Methode. Irgendwelche Ideen?
- Nur ein heads-up, KVO bezieht sich auf key-value-observing, das ist ein anderes Konzept von
NSNotificationCenter
. - Hoppla, noch ein wenig zu neu, um all dies. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast gesagt, dass
initWithFrame:
wird mehr als einmal aufgerufen, so dass ich davon ausgehen, bedeutet dies, dass die Ansicht zerstört wird und neu erstellt werden. Sie können entfernen Sie die view als Beobachter indealloc
wird aufgerufen, wenn der view ist nicht mehr erhalten, indem jedermann:dealloc
wird nicht genannt, aberinitWithFrame:
wird mehr als einmal aufgerufen, es klingt wie Sie haben ein memory leak. Stellen Sie sicher, dass die Freigabe der Untersichten, sobald Sie Sie nicht mehr benötigen (sofort nachaddSubview:
ist in der Regel angemessen).addSubview:
behalten die Untersicht solange, wie die übergeordnete Ansicht ist immer noch rund, so können Sie sicher lassen Sie die anzeigen, die Sie Hinzugefügt haben, sofort danach. Wenn Sie noch eine Referenz benötigen, können Sie halten Sie es, bis es entfernt von der superview oder bisviewDidUnload
genannt wird (an dem Punkt sollte man einfachnil
). Wenn deren Lebenszyklus nicht zeitlich mit Ihrem view-controller ist, dann wäre es sinnvoll, zu behalten und lassen Sie es auf einem mehr granularen Ebene.