Безопасно ли передавать уведомление (NSNotification) в качестве userInfo другого уведомления?

У меня есть объект, который отвечает на список уведомлений (A, B, C...). Каждый ответ заканчивается отправкой нового уведомления (X) другим слушателям. Я хочу включить старое/исходное уведомление — я имею в виду весь экземпляр NSNotification — как значение в словаре userInfo нового уведомления (X). Это безопасно?

(Моя интуиция подсказывает, что это не так, но я не вижу никакой особой проблемы, кроме, возможно, некоторых циклических ссылок, если содержимое словаря не обрабатывается тщательно).


person Greg    schedule 10.12.2019    source источник


Ответы (1)


Безопасно включать NSNotification экземпляров в качестве значения в словарь userInfo другого. В самом NSNotification действительно нет никакой магии. Это довольно простой/тонкий модельный класс, представляющий уведомление*. Как вы упомянули, вы захотите избежать циклов сохранения, например. одновременное включение двух уведомлений в информационные словари друг друга. Даже в этом случае самое худшее, что может случиться, — это (незначительная для двух уведомлений) утечка памяти.

* Технически NSNotification является кластером абстрактного класса, и когда вы создаете экземпляр NSNotification напрямую, вы фактически получаете экземпляр частного NSConcreteNotification (начиная с macOS 10.15.1), но это не влияет на ответ на ваш вопрос.

person Andrew Madsen    schedule 11.12.2019