Method selectors in Obj-C don't have to be strings, as long as you can turn a string into one occasionally.
You do still need to do a hash lookup to get the method implementation, since the selector table changes at runtime and objects have to safely respond to unhandled selectors and all that.
Mostly the difference is ints vs. strings in my opinion.
As well in C++ if you don't mark your method virtual you can bypass all the vtable crap.
I love ObjC but method resolution is far more expensive than in C++, especially non-virtual methods.