I use both Java and Obj-C at work. Objective-c suffers from its C heritage.
1. Pointers (just not useful or needed these days)
2. Memory-management (you don't get ARC unless you're happy to not cater for users using <5.0 (apparently this may not be true. thanks for the comments), and even with ARC you still need to do more than you do in Java)
3. Message-passing (Not bad per se, apart from this: you can send any selector to a nil object, meaning your app will fail silently in many instances. And that is huge.)
4. Header files (the #import is an advantage over usual C, but it's still a pain to remember to import any object before using it)
5. A hodge-podge of syntax: it's smalltalk-inspired syntax, with the more recent dot operator, with the usual C syntax.
6. Painful process of defining/declaring variables. Usual initiallisation, the @property, then @synthesize then initilise it in init: then nil it in viewDidUnload:, then decalloc it in dealloc:.
7. masklinn's point about Namespaces is important, too. Making a library with the standard three letter prefix on every class seems very hackish.
8. masklinn's point about the 'id' variable catch-all also: its very often misused. And your code is full of class checks.
I can live with those things. And that's even if they do make Java look like a nice language. What I really hate is Xcode. (And used to HATE eclipse before encountering Xcode)
1. After you get use to Eclipse's intellisenseque features, using Xcode is like wading through treacle. As one example, initilising a new member field is 1/2 a second job. In Xcode, you have to do what was in the last bullet point. For. Every. Single. Variable.
2. It's debugger/variable inspector, compared to Eclipse, is substandard.
3. Xcode crashes. Often.
4. It just doesn't feel as fast as Eclipse.
5. The debugger can hang on the iPhone a lot, meaning you need to turn it on and off quite often. It's okay in the simulator, I've found.