2016-09-04 6 views
1

Что произойдет, если я добавлю наблюдателя несколько раз, не удаляя его?Добавление одного и того же наблюдателя несколько раз без его удаления

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.

ответ

0

В соответствии с вашим кодом не только селектора будут запускаться несколько раз для каждого уведомления, он будет продолжать потреблять скорость обработки и время автономной работы на протяжении всего срока действия вашего приложения, пока вы его не удалите. Если вы хотите, чтобы наблюдатель мог быть добавлен несколькими действиями, проверьте, существует ли такой наблюдатель, а затем добавьте его, если это не так.

4

Каждый звонок в addObserver:selector:notificationName:object: добавит новую запись в таблицу рассылки NSNotificationCenter. Это означает, что несколько вызовов, даже если они сделаны с одним и тем же списком аргументов, добавят несколько записей в эту таблицу. Поэтому, чтобы ответить на ваш вопрос, да, регистрация нескольких раз за одно и то же уведомление приведет к тому, что метод обработчика будет вызываться несколько раз.

Если вы хотите, чтобы вы не регистрировались более одного раза, вам нужно будет отменить регистрацию своего наблюдателя в методах дополнительной срыва, см. Диаграмму ниже, чтобы узнать, где вы должны отменить регистрацию, в зависимости от того, где вы регистрируетесь (также Я рекомендую прочитать руководство филиала от Apple documentation):

view lifecycle ios