多次添加相同的观察者而不删除它

时间:2016-09-04 09:19:49

标签: ios swift nsnotificationcenter

如果我多次添加观察者而不删除它会怎样?

func registerForNotifications()
{   
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(foregroundNotification(_:)), name: UIApplicationWillEnterForegroundNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(backgroundNotification(_:)), name: UIApplicationWillResignActiveNotification, object: nil)
}

registerForNotifications()将在viewWillApppear中调用。

2 个答案:

答案 0 :(得分:8)

每次调用addObserver:selector:notificationName:object:都会在NSNotificationCenter的调度表中添加新条目。这意味着即使使用相同的参数列表进行多次调用,也会向该表添加多个条目。因此,要回答您的问题,是的,为同一通知多次注册将导致您的处理程序方法被多次调用。

如果你想确保你没有多次注册,你需要在补充拆卸方法中取消注册观察者,请参阅下图,根据你注册的位置知道你应该注销的位置(也是我建议阅读partial function application)的联盟指南:

view lifecycle ios

答案 1 :(得分:0)

根据您的代码,不仅每次通知都会多次触发选择器,它会在您的应用程序的整个生命周期中继续消耗处理速度和电池寿命,直到您将其删除。如果您希望观察者能够通过多个动作添加,请检查这样的观察者是否已经存在,然后只在不存在的情况下添加它。