Почему вызов метода в Objective-C называется передачей сообщений?

Это похоже на то, что если я «передаю сообщение» между двумя объектами, и если они были созданы в разных потоках, тогда вызванный метод все равно будет работать в потоке своего объекта?


person AppleGrew    schedule 27.01.2012    source источник


Ответы (1)


Вызов метода разрешается во время компиляции, и можно ожидать, что метод будет присутствовать во время выполнения. Передача сообщений разрешается во время выполнения, и объекту-получателю не нужно понимать, как обрабатывать сообщение.

Термин «передача сообщений» в Objective-C не имеет ничего общего с многопоточностью.

Я нашел хорошую статью на эту тему здесь: http://iskren.info/reading/info/ObjC/reading/dynamite.html

person Greg Hewgill    schedule 27.01.2012
comment
Означает ли это, что в С++, если я помечаю метод как virtual, то вызов его технически является «передачей сообщений»? Это означало бы, что все вызовы методов в Java также являются «передачей сообщений». - person AppleGrew; 27.01.2012
comment
Нет, потому что хотя методы virtual (как в C++, так и в Java) вызываются с использованием позднего связывания, компилятор и среда выполнения гарантируют, что на другом конце вызова действительно есть метод. В Objective-C вы можете передать любое сообщение любому объекту, и объект либо обработает его, либо нет. - person Greg Hewgill; 27.01.2012