0

我有一个关于删除观察者的基本问题。iOS - 使用dealloc删除观察者

我有一个由3个ViewController子类继承的ViewController父类。 例如。 BookVCVC,BookFlightVC,BookTrainingVC

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

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

现在我想删除观察者,当我从任何一个孩子ViewControllers的搬走,但我不能在每个孩子的ViewController的dealloc[super dealloc]因为ARC不允许这样。

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

请提出建议。

回答

0

只是不要拨打super!在ARC中不需要(见http://clang.llvm.org/docs/AutomaticReferenceCounting.html#dealloc)。

-(void)dealloc { 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

} 
+0

你的意思是我应该在父类本身写'dealloc'? 如果是这样,我首先完成了它,但它没有被调用。 – cheeseRoot 2014-09-10 19:17:24

+0

@ pRimei5你确定所有对该对象的引用都已被释放吗? – 2014-09-10 19:25:59

1

卸下观察员dealloc被罚款,不叫[super dealloc](如你所看到的,启用ARC,编译器不会让你),简单的写:

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

与ARC你甚至不能明确地调用dealloc :) – 2014-09-10 19:23:28

+0

@JulianKról更新我的答案,以更好地反映这一事实 – 2014-09-10 19:24:46

+0

这个词需要不符合我的意见,你根本无法使用它 – 2014-09-10 19:25:55