I could go on at length, but Rob Rix of Black Pixel does a sublime job:
Objective-C is a compromise by design, and it is utterly unembarrassed by this. It is, I think, a good compromise, finding a sweet spot where one has very convenient access to low-overhead constructs for performance (C and C++ can be linked in and even intermingled with ObjC) while still having a nice dynamic messaging system supporting flexible late-bound polymorphism.
It’s also a compromise from the ’80s. (Relatively) recent advances in functional programming (among other spheres) sometimes make me wonder if we could strike a better one today.
He details lots of its shortcomings which I agree with fully. It would be really awesome to rebuild the same semantics and syntax of the language without all the C baggage.