Objective-C uses dynamic binding, but how

dynamic-bindingobjective c

I know that Objective-C uses dynamic binding for all method calls. How is this implemented? Does objective-c "turn into C code" before compilation and just use (void*) pointers for everything?

Best Answer

Conceptually, what is going on is that there is a dispatcher library (commonly referred to as the Objective C runtime), and the compiler converts something like this:

[myObject myMethodWithArg:a andArg:b ];

into

//Not exactly correct, but close enough for this
objc_msgSend(myObject, "myMethodWithArg:andArg:", a, b);

And then the runtime deals with all the binding and dispatch, finds an appropriate function, and calls it with those args. Simplistically you can think of it sort of like a hash lookup; of course it is much more complicated that then in reality.

There are a lot more issues related to things like method signatures (C does not encode types so the runtime needs to deal with it).