7

我在自定义 UIView 下添加了一个观察者initWithFrame:

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

问题是,这个视图是一个子视图。当视图再次加载时,它再次调用 initWithFrame 消息,从而添加了两个观察者等等。当视图将要消失时,如何移除观察者?因为它是 a UIView,所以它说这viewWillDisappear:(BOOL)animated不是一个有效的方法。有任何想法吗?

4

1 回答 1

12

您已经说过initWithFrame:不止一次调用它,所以我认为这意味着视图正在被销毁和重新创建。您可以在 中将视图作为观察者移除,dealloc当视图不再被任何人保留时将调用该视图:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}
于 2010-12-23T02:49:40.243 回答