iOS - 使用 dealloc 删除观察者

标签 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];

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

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

请提出建议。

最佳答案

删除 dealloc 中的观察者是可以的,不要调用 [super dealloc] (如你所见,启用 ARC,编译器不会让你这样做),只需写:

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

关于iOS - 使用 dealloc 删除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773229/

相关文章:

ios - 台风:组装和 Storyboard创建的 ViewControllers

ios - 在 iPhone 5s iOS 8.1.2 和模拟器 8.1 上找不到支持类型 4 和 5 的键盘

ios - 从父 ViewController 更改嵌入式 UITableViewController 数据

ios - 选择表格单元格时删除键盘

iOS:如何正确停止事件指示器?

ios - NSNotificationCenter 删除观察者

iphone - NSNotificationCenter 的大问题,它不会更新目标的显示

ios - 是否可以使用 Xcode 单元测试执行 GUI 测试

iOS Facebook SDK 在登录屏幕中显示 $(PRODUCT_NAME)

ios - 分段 Controller 中可以维护两个 TableView 和一个 View Controller 吗?