У вас в основном это есть.Ваши цифры 1-3 в целом верны.
- Вам никогда не нужно выделять свой собственный объект NSNotification.
- Вы обычно передаете «я» как «объект» уведомления, как вы говорите, но вы также можете передать что-то еще, если вы уведомляете «от имени» чего-то другого, концептуально.Но это было бы менее распространенным случаем.
- Уведомления - это не то же самое, что «события» в пользовательском интерфейсе.У какао есть события;они являются событиями мыши / клавиатуры / касания, и они «всплывают» в «цепочку респондента» через объекты пользовательского интерфейса.Уведомления являются полностью независимым механизмом, который не привязан к пользовательскому интерфейсу, и он используется для общего глобального вещания среди разъединенных / независимых объектов.Это больше похоже на наличие нескольких делегатов для объекта.
- Да, вы должны определить имя уведомления где-нибудь, чтобы каждый, кто его использует, мог видеть.В самом Какао это обычно публичный заголовок с объявлением типа
extern NSString *const UIKeyboardDidShowNotification
.В некоторых частных файлах реализации есть определение.
Специальное примечание относительно вашего # 4 выше.Думайте об уведомлениях как о уведомлениях, а не как о инструкциях .Они обычно фиксируют изменения состояния или широко интересные события.«MenuItemTapped» - разумная вещь для уведомления, но обычно «NavigateTo» - нет, потому что вы подразумеваете, что вы указываете какой-то конкретный объект для навигации куда-то.Если это так, то этот объект, вероятно, должен быть делегатом (или должен быть свойством) объекта, который хочет навигации, и вы должны заставить его происходить напрямую.Это, конечно, не требование, и вы можете использовать механизм для чего угодно.Но шаблоны проектирования Какао обычно не используют уведомления для «сообщения объектам, что делать», а только для «сообщения тому, кто заботится о том, что произойдет / произошло».Имеет смысл?
Наконец, конкретно по поводу ваших примеров в # 4 - они звучат как настоящие события пользовательского интерфейса и кажутся, что все это можно обработать с помощью делегирования, если только нет какой-то причины, почему эти объекты должны бытьтак развязан.