如果我在viewDidLoad
中向[NSNotificationCenter defaultCenter]
添加一个观察者,那么我是否应该在viewDidUnload
中将其删除?
如果我在viewDidLoad
中向[NSNotificationCenter defaultCenter]
添加一个观察者,那么我是否应该在viewDidUnload
中将其删除?
如果你需要在初始化器中添加这些内容,你应该在dealloc
方法中将其删除。理想情况下,你只在当前屏幕上或离开时关心这些通知。
viewDid[Appear|Disappear]
方法可能会在 UIViewController
的生命周期内被多次调用。在viewDidAppear
方法中注册通知,而在viewDidDisappear
中注销它。
dealloc
方法中删除它。在我看来,viewDidUnload 是放置它的地方。
如果被调用的通知处理程序访问了视图控制器管理的任何视图,则这将是一个错误或会导致视图不必要地重新加载。如果您的视图没有显示,那么最可能的情况是视图控制器不需要获得通知。如果它确实需要,请在对其进行任何更改之前至少检查视图是否已加载。虽然视图尚未加载,但您可能仍然需要更新视图控制器的状态,例如更改或清除缓存值,但在其重新加载之前不要更新视图。
第二个问题,如果您在 viewDidUnload 中不删除观察者,并且 viewDidLoad 再次被调用会发生什么?您会再次调用 addObserver。这可能不会有什么影响,通知中心可以检测到重复添加操作。