如何在UIView中删除NSNotification的观察者?

时间:2010-12-23 02:46:11

标签: iphone objective-c cocoa-touch uiview nsnotifications

我在initWithFrame:下创建的自定义UIView中添加了一个观察者。

[[NSNotificationCenter defaultCenter] addObserver:self 
         selector:@selector(updateZipFromLocation:) 
          name:@"zipFoundFromLocation" 
           object:nil];

问题是,这个视图是一个子视图。再次加载视图时,它再次调用initWithFrame消息,从而添加两个观察者,依此类推。当视图消失时,如何移除观察者?由于它是UIView,因此它表示viewWillDisappear:(BOOL)animated不是有效的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:12)

您已经说过initWithFrame:不止一次被调用,所以我认为这意味着视图正在被销毁并重新创建。您可以在dealloc中以观察者的身份删除视图,当任何人不再保留视图时,系统会调用该视图:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}