Пересылка сообщений в Цели C - PullRequest
4 голосов
/ 16 декабря 2009

Кто-нибудь может дать краткое объяснение, как использовать пересылку сообщений?

Ссылки

  • Документация Apple : документация Apple, как правило, хороша для справки, но достаточно длинна, чтобы не быть лучшей в качестве введения.

Ответы [ 2 ]

5 голосов
/ 16 декабря 2009

Шаблон простого делегирования: ваш объект отвечает на сообщение aMethod, затем он проверяет, отвечает ли какой-либо другой объект на сообщение aMethod, посылая [otherObject RespondsToSelector: @selector (aMethod)], который возвращает bool. Если другойObject делает, вы можете отправить сообщение.

Больше технических преимуществ NSInvocation: если вашему объекту отправлено сообщение, на которое он не может ответить (crazyMethodName), то forwardInvocation вызывается для вашего объекта. Реализация по умолчанию forwardInvocation для NSObject просто вызывает didNotRecognizeSelector, потому что ваш объект не распознает селектор. Вы можете переопределить реализацию forwardInvocation по умолчанию, проверив, реагирует ли другой объект на селектор вызова, и, если это так, вызовет этот вызов для другого объекта.

3 голосов
/ 16 декабря 2009

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

Пересылка сообщений действительно позволяет классу получать сообщения, которые он не был предназначен для приема: вы даже можете использовать его для динамического создания методов на лету. Приложением этой категории будет категория NSManagedObject, которая позволит вам получать доступ к свойствам базовых данных в вызовах методов без написания пользовательских подклассов NSManagedObject для каждого объекта. Этот вид напоминает мне method_missing в Ruby.

...