Just off the top of my head, Why Objective-C Pisses Me Off (some of them are Cocoa beefs, but I consider them intertwined enough that they count):
-header files, as you mentioned
-no namespaces (we don't need such basic things as visibility control, we're really C with a funny hat!)
-no meaningful access modifiers (unconscionably stupid, and one the Objective-C community handwaves with "hurr, don't call a private function somewhere else!")
-no operator overloading; for most of the code I do for fun this is more important than you'd think ("add together two vectors"); some languages can get by without it but after having it in C++, C#, and others it's a pain in the ass
-lots of clumsy syntax (@"blah" and @keyword fucking with my IDE autocomplete, lotsOfReallyFuckingLongMethodsThatCouldBeNamedLessStupidly, the basic message-passing structure is not exactly a shining example of good design)
-the decoupled design is in itself a flaw in a lot of ways: I understand the Smalltalk paradigm and why it is theoretically not terrible, but when I get hit with runtime errors that should have been caught at compile time, I get really ugly
-a mediocre garbage collector on OS X, no garbage collection at all in iOS (yes, blah blah, "if you're a good programmer you don't need one" - unless you are capital-M Magical your code leaks somewhere)