Actually, Apples usage of Objective-C sucks according to Deek (an ornery fellow in #quakeforge (founder, actually) that I can't say I've ever seen be wrong). He seems to reckon that most of Apple's Objective-C coders are ex-C++ coders and thus produce a lot of deep hierarchies.
I like Objective-C: it's pretty nifty, however, 95% of my experience with it is bolting it onto QuakeC and then doing some Objective-QuakeC coding (qf's menus, adapted frikbot, a game of my own). There is no "nil" object, nil is just ((id)0) (void * for objects), and the language is designed such that sending a message to nil is a no-op that returns nil. IMHO, Objective-C has C++ beat hands-down, except for two things: funciton/operator overloading and non-virtual member functions. Objective-C's message passing beats the pants off C++'s virtual functions. And then there are protocols (an interesting way to combine abstract classes and multiple inheritance, which Objective-C does not have) and categories (let's see you do
that in C++

).
Objective-C's real power comes not so much from its syntax (which is pathetically simple for what it does), but rather that almost every decision has been deferred until runtime. Sure, naive usage will result in slower code than C++, but there are ways to speed it up. Anyway, even with fairly naive code (I don't know enough of the ins and outs), I haven't noticed any performance issues in QF's implementation (though a p166 might struggle with a QF qw server running 16+ frikbots).
Anyway, if you want to see what QF+qfcc are capable of, take a look at ruamoko/cl_menu (though Deek says my code is a little class heavy, but then, I'm an ex-C++ coder

). Also, fbxa in the game-source module (just change quakeforge to game-source for the git clone line) has some examples of categories (I used them to split the implementations across several files). There's also snax's scheme implementation in the ruamoko directory.
A word of warning: qfcc's optimizations are a little buggy at the moment (struct copy into a 3rd (or later) param gets dead-vared: oops).