Это зависит от того, какие классы создаются и как формируются фактические объекты. Это также зависит от того, подходит ли подкласс для обработки. В противном случае, как говорят документы NSNotificationCenter, порядок объектов, получающих уведомления, является случайным и НЕ зависит от того, какой вы подкласс или суперкласс. Рассмотрим следующие образцы для лучшего понимания: (несколько примеров необходимы, как ваш экспликация не совсем понятно):
Пример 1: два разных объекта
ParentClass *obj1 = [[ParentClass alloc] init];
ChildClass *obj2 = [[ChildClass alloc] init];
// register both of them as listeners for NSNotificationCenter
// ...
// and now their order of receiving the notifications is non-deterministic, as they're two different instances
Пример 2: подкласс называет супер
@implementation ParentClass
- (void) handleNotification:(NSNotification *)not
{
// handle notification
}
@end
@ipmlementation ChildClass
- (void) handleNotification:(NSNotification *)not
{
// call super
[super handleNotification:not];
// actually handle notification
// now the parent class' method will be called FIRST, as there's one actual instace, and ChildClass first passes the method onto ParentClass
}
@end
Методы действия уведомления должны иметь один параметр - объект уведомления. –
@JoshCaswell, это правда? Я думал, что если вы пропустили двоеточие после имени селектора при регистрации, что вам не нужен параметр. Я не могу проверить это только сейчас ... –
@Josh Caswell nope. Если вы объявите метод с меньшими аргументами по мере необходимости, это не проблема. Из-за соглашения о вызове функции C параметры находятся в верхней части стека при вызове, а функция может вызывать их по одному, пока не «закончится аргумент». Таким образом, единственная истинная проблема заключается в том, что вы используете больше аргументов, чем это возможно. –