Таким образом, у меня есть объект, который имеет методы для переключения наблюдения за определенное имя уведомления, например, так:NSNotificationCenter - Наблюдение за Notification Имени с несколькими методами
- (void)startWatchingForA
{
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleA:)
name: SomeNotificationName
object: nil];
}
- (void)stopWatchingForA
{
[[NSNotificationCenter defaultCenter] removeObserver: self
name: SomeNotificationName
object: nil];
}
Который работает отлично. Однако у меня есть другой метод: handleB:
, который должен отвечать на одно и то же уведомление.
- (void)startWatchingForB
{
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleB:)
name: SomeNotificationName
object: nil];
}
- (void)stopWatchingForB
{
[[NSNotificationCenter defaultCenter] removeObserver: self
name: SomeNotificationName
object: nil];
}
Вопрос заключается в том, что следует stopWatchingA
или stopWatchingB
быть вызван, объект перестанет смотреть на обоих. Есть ли способ удалить один экземпляр наблюдения, но не другой?
В идеале, когда я звоню stopWatchingForA
, я хочу, чтобы handleA:
не вызывался, полностью не зависит от B
.
Да, [объявление ivars в '@ implementation' является законным] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-TPXREF126) с недавним компилятором. –
И одна из наиболее полезных функций тоже! переменные реализации @private полезны во многих отношениях. –
+1 для хорошо продуманного ответа! Я соглашусь, но это не тот метод, с которым я пошел. Я объясню в своем ответе. –