Я хочу иметь несколько наблюдателей при нескольких событиях одного объекта (отношения 1-к-N).Когда использовать NSNotificationCenter
Механизм для достижения этой задачи предоставляется NSNotificationCenter
. Механизм выглядит довольно переполненным, когда используется для моей проблемы.
Как бы я сделать это вручную без использования NSNotificationCenter
:
- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
добавлять и удалять наблюдателей от моего объекта.
- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
for (id delegate in delegates) {
NSObject *data = [eventData copy];
[delegate someEventFired:data];
}
}
Этот механизм прост и прост в реализации без того, чтобы объекты могли делиться дополнительными строками.
- Есть ли официальный шаблон для делегатов 1-в-N (например, события C#) в iOS-каркасе, кроме
NSNotificationCenter
? - Когда следует использовать
NSNotificationCenter
, а когда нет? - Когда должна быть реализована реализация, подобная той, которую я предлагаю здесь, а когда нет?
Я редко или никогда не использовал NSNotificationCenter, но пошел тем же методом, который вы описываете. Я использовал это в многочисленных приложениях iOS (скажем, более 50 приложений) в течение многих лет, я пока не видел никаких проблем с этим. Возможная добыча может заключаться в том, что вы должны быть уверены, что время от времени удаляете наблюдателей, или они могут не освобождаться, когда ожидаются, потому что они сохраняются хранителем делегатов. – Jonny
Я думаю, что хотя NSNotificationCenter - это не тот подход, который мы знаем из C#, мы все равно должны сосредоточиться на использовании шаблонов проектирования для конкретной платформы, над которой мы работаем. Тем не менее, я пошел с NSNotificationCenter в нескольких приложениях (не так много, как вы, хотя), и я не думаю, что код стал хуже благодаря этому. – Etan