In my day job I code Java in Eclipse and a bit C# in Visual Studio. At night I do a calendar app for iOS.
I love coding for iOS for many reasons and think ObjC is a more simple language than C# which is good. I like many things about ObjC.
But ObjC has some very clear deficiencies that go back to the fact that it is an older language:
- Pointers. In neither C# nor Java it is by design possible to do random memory overwrite with all the strange runtime behavior that leads to and thus difficult debugging. ARC circumvent some of this with nullable weak references but the problem is still there at its core. If you in C# or Java need to do “native” (= c/pointer code) you do it very conciensly and thus only when necessary.
- No namespaces. This is a real challenge, even in minor projects and lead to the prefixes such as NS or UI which do not really solve the problem.
- Separation of h and m. It is just extra (duplicate) work and more to hold in your head when thing need to be written both in the h and in the m file. I believe all modern languages gets rid of this – it seemed like a good idea in the eighties (seventies) but it is not. (unlike high marginal taxes). ObjC do have lots it does better than Java and C# but the above is quite annoying and cumbersome.
- Garbage collection. While I agree that ARC will mostly resolve the remaining challenges it is future. We do not have ARC yet.
Xcode is clearly generations behind also, although catching up:
- 1. Navigation. In Eclipse and Visual Studio it is sooooo fast to jump around the code and follow code paths. And most importantly you can do it completely the keyboard. Xcode is so far behind it is embarrassing.
- Code path navigation – Xcode is catching up but still noticeably behind
- Inheritance navigation
- Jump to file, class, method from the keyboard. With completion and partial typing.
- “Who calls this method”
- Code-completion. I cannot tell exactly why but it is more complete and helpful in Eclipse
- “suggestions”. Xcode (llvm) starting to have a bit but in Eclipse 80 % of errors are catched directly by the editor and can be solved (using the keyboard) by simply saying “yes please, solution number two you suggest”. This is extremely powerful in Eclipse and will often include quite complex solution otherwise involving a lot of typing.
- Refactoring. A lot more refactoring possibilities and they just work. Even simple renames go wrong or need manual work afterwards often in Xcode.
- Debugging. The debugger in Xcode is quite bad and buggy with regards to data examination and navigation. Going to the console can sometime get the job done if you know the right tricks but far from always.
- Documentation navigation. It was ok in Xcode 3 but in Xcode 4 it is really really really bad. And again you cannot keep you hands on the keyboard. Eclipse is not brilliant here either, but still much better.