iOS - 使用dealloc删除观察者

时间:2014-09-10 19:09:56

标签: ios uiviewcontroller nsnotificationcenter dealloc observers

我有一个关于删除观察者的基本问题。

我有一个ViewController父类,它由3个ViewController子类继承。 例如。 BookVC - > BookHotelVC,BookFlightVC,BookTrainVC

在这里,我在父类的viewDidLoad中添加了一个观察者(我在子ViewControllers中做[super viewDidLoad]),它通知在父类中编写的方法。我的代码 -

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

现在我想在离开任何子ViewControllers时删除观察者,但是我不能在每个子ViewController的[super dealloc]中写dealloc因为ARC不允许这样做。

如何删除已设置的观察者?因为每当我移动到子ViewController时,会添加一个新的观察者,这会导致奇怪的事情(例如,调用该方法两次/三次...... - 调用警报两次/三次......)。

请建议。

2 个答案:

答案 0 :(得分:1)

删除dealloc中的观察者很好,不要调用[super dealloc](如你所见,启用ARC,编译器不会让你),只需写一下:

- (void)dealloc {
    [self removeYourObservers];
}

答案 1 :(得分:0)

请勿拨打super!在ARC中,它不是必需的(参见http://clang.llvm.org/docs/AutomaticReferenceCounting.html#dealloc)。

-(void)dealloc {

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}