- C# goodness, especially event handlers instead of overly verbose ObjC delegates
- It's fun to port ObjC loops to oneliners using LINQ and lambdas
- I prefer somewhat ugly MonoDevelop to pretty-but-very-odd Xcode
- I can reuse both C# and ObjC code, and ObjC code is straightforward to port, if needed
- Xamarin support is friendly and helpful
There are some things that annoyed me:
- Some generic-heavy C# code will crash the device due to AOT limitations—learned it the hard way
- MonoDevelop hangs for a few seconds after you switch from Xcode, even if you didn't change anything
- You need to make sure you _understand_ how MonoTouch GC works together with ObjC reference counting, or you'll get memory leaks
- You'll need to learn to use Instruments to find those memory leaks
- Debugger often freezes (should've reported this)
- Binaries can get heavy, but not too heavy
- Compilation is impossibly slow on Air, barely tolerable on Pro
- Lack of tooling for binding ObjC code—I wish I could just drop ObjC files and headers into a MonoTouch binding project instead of compiling it to fat binary first
But still, I'm glad we went with MonoTouch.