NSNotification、addObserver 和 removeObserver - ViewDidUnload 和 dealloc 中的 removeObserver?

Posted

技术标签:

【中文标题】NSNotification、addObserver 和 removeObserver - ViewDidUnload 和 dealloc 中的 removeObserver?【英文标题】:NSNotification, addObserver and removeObserver - removeObserver both in ViewDidUnload and dealloc? 【发布时间】:2011-04-03 18:16:32 【问题描述】:

我想添加一个视图控制器作为通知的观察者。

当调用选择器方法时,我会提醒用户。我希望此警报仅在此视图控制器是顶视图控制器时出现。

我想将它添加为viewDidLoad 方法中的观察者。但是将视图控制器作为观察者在哪里更好呢?

如果我在viewDidUnloaddealloc 中都删除它会不会有问题?

【问题讨论】:

【参考方案1】:

没有。根据the documentation:

从接收者的调度表中删除所有指定给定观察者的条目。

如果没有这样的条目,则没有什么可删除的,所以这不是问题。

但是,根据您使用它的方式,将其添加为 viewDidLoad 中的观察者并不意味着它只会在该视图控制器是“顶视图控制器”时使用(例如,如果您有多个选项卡并从一个选项卡移动到另一个选项卡,除非您收到内存警告,否则其他(不可见)选项卡的视图在您离开它们时不会被卸载)。

根据您的目标,最好在 viewDidAppear 上添加观察者(如果是这样,在 viewWillDisappear 上删除)。

【讨论】:

谢谢...我想我会使用你最后的建议。

以上是关于NSNotification、addObserver 和 removeObserver - ViewDidUnload 和 dealloc 中的 removeObserver?的主要内容,如果未能解决你的问题,请参考以下文章

NSNotification消息

NSNotification removeObserver 问题

如何快速将数组传递给 NSNotification

关于iOS开发中NSNotification

NSNotification的使用 & 和代理的区别

AV录音中断