It sits directly atop C, which, for example, is why C++ is very portable.
There is significant difference between C++ and Objective-C in this matter. Implementations of C++ that emit C are almost always implemented as full compilers that targets C as output language, but Objective-C can be easily implemented as quite simple preprocessor on top of C, that has almost no understanding of C's syntax. (traditional Objective-C, ie. without closures and such features)
Obj-C is basically C with objects. The first objective-c versions were simply pre-processors that generated C code.