2012-06-06 5 views
3

У вас есть класс, который должен отправить сообщение своему родителю. Этот класс не используется никаким другим членом вашего приложения. Вы отправляете сообщение как NSNotification или вы создаете протокол делегата в этом классе и реализуете метод делегата в родительском, чтобы вы могли отправить сообщение?iPhone - делегат или уведомление?

Каков наилучший подход и почему? Есть ли какое-то преимущество одного метода над другим?

Благодаря

ответ

4

Хотя оба подхода могут быть использованы для удовлетворения описанного требования к обмену сообщениями, в этом случае предпочтительнее использовать протокол делегатов.

Преимущество уведомления как шаблона заключается в том, что многие объекты могут отвечать на уведомление, которое было опубликовано. Объект, желающий соблюдать уведомления, должен зарегистрироваться только для их получения. Преимущество этого заключается в том, что ваш код очень слабо связан (как правило, желаемое значение в oop). Недостатком свободной связи в этом случае является тот факт, что у вас есть потенциально связанное поведение, происходящее в разных классах и по существу по всей вашей кодовой базе.

Шаблон делегирования более тесно связан, и ваш объект делегата должен соответствовать протоколу объекта, из которого он будет получать сообщения. Из-за этого относительно легко наблюдать природу взаимодействия (или предполагаемого взаимодействия) между уведомляющим объектом и уведомляемым объектом - его легче понять, просто просмотрев код, обмен сообщениями между двумя «связанными» объектами. В случае, когда у вас есть ребенок, который по существу объявляет о каком-либо поведении (которое, по-видимому, напрямую связано с поведением родителя, предположительно), я считаю, что делегирование является превосходным подходом.

5

Уведомления полезно, когда у вас есть несколько наблюдателей или объекты, которые заинтересованы в уведомлении. They're also useful for Key Value Observing.

Делегаты очень полезны для отправки сообщения (которое соответствует объявляемому протоколу) с одного объекта на другой объект, назначенный в качестве цели делегата.

+0

спасибо. Вот что я подозревал ... – SpaceDog

Смежные вопросы