Conditional compilation is pretty widely used in C, so I guess Obj-C inherits it from there. The most obvious case is when your code is running on different architectures - consider #ifdef OSX / #ifdef iOS or similar. In Java you're theoretically writing for only one architecture, so I guess it'd be less useful.
I don't know Obj-C well at all, but no arguments on the rest :)
I don't know Obj-C well at all, but no arguments on the rest :)