Ios 在Master/Detail应用程序中使用removeObserver的正确方法

Ios 在Master/Detail应用程序中使用removeObserver的正确方法,ios,objective-c,master-detail,Ios,Objective C,Master Detail,在master detail应用程序中,我有以下布局: 掌握 我们假设这里有一个UITableView 细节 显示有关主控形状项的详细信息。我们在NSNotificationCenter中设置了一个观察者 DetailModal 显示某物,从细节显示 如果我仍然希望在显示Detail或DetailModal时接收通知,但在返回Master时将其删除,那么调用removeObserver的正确方法是什么 在我看来,我会设置一个标志,在显示DetailModal时不删除观察者,并在viewwilld

在master detail应用程序中,我有以下布局:

掌握 我们假设这里有一个UITableView

细节 显示有关主控形状项的详细信息。我们在NSNotificationCenter中设置了一个观察者

DetailModal 显示某物,从细节显示

如果我仍然希望在显示Detail或DetailModal时接收通知,但在返回Master时将其删除,那么调用
removeObserver
的正确方法是什么


在我看来,我会设置一个标志,在显示DetailModal时不删除观察者,并在
viewwilldisapear
中检查该标志。这是一个好方法吗?

我通常在我的子视图/子视图控制器的
-(void)dealloc
方法上调用
removeObserver
。弹出
DetailModal
后,应将其释放。

未解除锁定-有关讨论,请参阅

最好在视野中做这件事。我通常有一个布尔“isObserving”标志,在观察开始时设置,然后在调用ViewWillEnglishe时检查

eta——最佳实践表明,实际上应该在这两种情况下都这样做,但dealloc只是一个后盾


eta#2:使用ARC时,仅当引用计数降至零时才调用dealloc。如果它正在观察,则引用仍然存在,因此dealloc永远不会被调用。

听起来像是我的想法,标志和签入视图将消失。您粘贴的链接中选择的答案实际上是使用dealloc。讨论围绕该问题展开,这可能是一个更好的链接: