Загальна відповідь буде "як тільки вам більше не потрібні сповіщення". Це, очевидно, не задовольняє відповідь.
Я рекомендую вам додати виклик [notificationCenter removeObserver: self]
у метод dealloc
тих класів, які ви маєте намір використовувати як спостерігачі, оскільки це останній шанс чисто зареєструвати спостерігача. Однак це захистить вас лише від збоїв через те, що центр сповіщення повідомляє про мертві об’єкти. Він не може захистити ваш код від отримання сповіщень, якщо ваші об'єкти ще не перебувають у стані, в якому вони можуть належним чином обробляти сповіщення. Для цього ... Дивіться вище.
Редагувати (оскільки, здається, відповідь викликає більше коментарів, ніж я б міг подумати). Все, що я намагаюся сказати тут, - це дійсно важко дати загальну пораду щодо того, коли найкраще видалити спостерігача з центру сповіщень, адже це залежить від:
- У вашому випадку використання (Які сповіщення спостерігаються? Коли їх надсилають?)
- Реалізація спостерігача (Коли він готовий отримувати повідомлення? Коли він більше не готовий?)
- Передбачуваний життєвий час спостерігача (чи прив'язаний він до якогось іншого об'єкта, скажімо, контролера перегляду чи перегляду?)
- ...
Отож, найкраща загальна порада, яку я можу запропонувати: захистити ваш додаток. проти хоча б однієї можливої невдачі, займайтеся removeObserver:
танцями dealloc
, оскільки це останній момент (у житті об'єкта), де ви можете це робити чисто. Що це не означає: "просто відкладіть видалення, поки не dealloc
буде викликано, і все буде добре". Натомість видаліть спостерігача, як тільки об’єкт більше не готовий (або потрібен) для отримання сповіщень . Це саме правильний момент. На жаль, не знаючи відповідей на жодне з вищезазначених питань, я навіть не можу здогадатися, коли це станеться.
Ви завжди можете removeObserver:
безперешкодно захищати об'єкт кілька разів (і всі, окрім першого дзвінка з даним спостерігачем, будуть носочками). Отже: подумайте про те, щоб зробити це (знову) dealloc
лише для того, щоб бути впевненим, але в першу чергу: зробіть це у відповідний момент (що визначається вашим випадком використання).