我有一个关于删除观察者的基本问题。
我有一个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时,会添加一个新的观察者,这会导致奇怪的事情(例如,调用该方法两次/三次...... - 调用警报两次/三次......)。
请建议。
答案 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];
}