A message is the name of a selector, and the parameters for that selector.
A selector is a symbol.
A method is a piece of code in a class identified by a selector.
In other words, [foo bar: baz]
says "send the message called @selector(bar:)
with parameter baz
to object foo
. You could send that message to many different objects.
In contrast, the method bar:
for a Foo
might look like
-(int)bar:(int)n {
return n + 1;
}
but for a FooTwo
might look like
-(int)bar:(int)n {
return n + 2;
}
(I hope I have the syntax right; it's been a while since I last touched Objective-C.)
When you send the message, the Objective-C kernel dispatches the message to foo
which decides whether it understands the message. It decides this based on whether it can find a method identified by that selector.
Two methods with the same name, and one message.
It's also possible for an object to simply forward a particular message (or set of messages) to another object for processing. In this case, you send a message to this proxy object, which has no methods to match that message, and the proxy forwards the message to its wrapped object.