На странице, на которую вы ссылаетесь, говорится об удаленной передаче сообщений, например, SOAP или CORBA.Это действительно не имеет большого отношения (если вообще что-либо) к передаче сообщений Objective-C.(Да, статья в Википедии о Objective-C ссылается на нее - этой ссылки действительно не должно быть.)
Разница между отправкой сообщения и вызовом метода заключается в том, что первое является очень динамичным.Сопоставление имени сообщения с функцией, которая его обрабатывает, выполняется во время выполнения, тогда как вызов метода привязан к функции во время компиляции.
Это допускает тип динамического программирования, который невозможнолегко сделать в C ++.Например, среда выполнения Objective C будет искать -forwardInvocation: и вызывать его, если объект не отвечает напрямую на указанное сообщение.Это позволяет классу, такому как NSProxy, который может выступать в качестве «подставки» для любого другого класса, без необходимости знать все детали класса, для которого он является прокси.
Другим примером является расширениеопределение класса во время выполнения, без необходимости перекомпиляции или даже перезапуска приложения - все, что нужно сделать, это зарегистрировать функцию реализации в среде выполнения.
Еще один пример - поддержка языковых мостов.Мой собственный мост Какао / Perl, например, имеет только одну функцию реализации, которая обрабатывает любое сообщение, отправленное объекту Perl - он проверяет имя сообщения и вычисляет, на лету, какую функцию Perl следует вызывать вответ.
Редактировать: Кстати, после того, как функция, обрабатывающая данное сообщение, разрешена, механизм вызова этой функции - то есть построение стекового фрейма для передачи аргументов - становится точно таким же, как если быпривязка имени к функции была сделана во время компиляции.Представление о том, что аргументы передаются по-разному, является просто красной селедкой, введенной в не по теме статьей в Википедии.