0

Одна из вещей, с которыми я (все еще) сталкиваюсь с проблемой попадания в затылок, - это общедоступные/частные методы, параметры и способы их работы по сравнению с Java-миром, в котором я жил долгое время.Должны ли методы селектора наблюдения Notificationcenter войти в файл заголовка?

Я начал использовать notificationcenter поскольку некоторое время назад, и я заметил, что вы можете объявить метод в файле реализации (.m) и использовать его в качестве селектора при регистрации наблюдателя в NSNotificationCenter

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aMethodNotDefinedInTheHeaderFile:) name:NOTIFICATION_KEY object:nil]; 

Итак, мой вопрос - что здесь лучше? Должен ли я определить метод в моем файле заголовка и с какой целью?

Указатели очень ценятся.

+2

Нет, не обязательно указывать свои методы в файле .h.', если вам не нужен доступ к методу вне вашего класса. – Maulik

ответ

0

Объявление методов в файлах заголовков используется для получения пользователями обзора классов методов, которые они могут использовать.

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

Однако, если этот метод является частью API, который можно использовать в другом месте, вы, вероятно, захотите поместить его в файл .h.

+0

Спасибо. То, что меня немного смущает, - это все эти разговоры в других местах о частных/общедоступных методах по сравнению с java, например здесь http://stackoverflow.com/questions/172598/best-way-to-define-private- методы-для-класса-в-объекте-c -if, если вы хотите, чтобы метод был закрыт, не так ли, то достаточно просто не иметь его в файле заголовка? – Mathias

+0

В obj-c нет такой концепции, как «частный метод». Вы можете отправить любое сообщение любому объекту, и если объект может ответить на него, он будет. Итак, если вы не видите метод в файле .h (что делает его «закрытым»), но вы знаете, что этот метод существует, вы можете просто выполнить функциюSelector :. – kovpas

+0

Да, я так понял, так как центр уведомления, по-видимому, может вызвать мой метод :) Я просто имел в виду, что определение, не имеющее метода, указанного в h-файле, должно быть достаточным для определения его как «частного». Я нашел здесь некоторые другие темы, которые так думают, поэтому я буду придерживаться того, что я думаю. Благодаря! – Mathias

0

Вам не нужно определять свой метод в файле заголовка, так как вам не нужен доступ к этому методу вне вашего класса, ваш метод будет использоваться только центром уведомлений. Поскольку вы определили метод внутри вашего файла реализации, вы ответите на селектор. Все в порядке.