MonoTouch isn't a translator. It's simply the Mono runtime running on iPhone, with some fancy trickery to make it compatible with the iPhone's restrictions.
The conventional Mono "runtime" isn't just the JIT, it also handles GC, reflection, I/O layer, threading, exceptions etc. There's also the class libraries. In order for your app to run on the iPhone, much of this must be included with the app. Slimming it down presents some challenges. In addition, the iPhone prevents JIT runtime code generation, only runs signed code, and doesn't allow dynamic libraries.
What MonoTouch does is to use an IL linker to combine just the parts of the class libraries that your code uses into a single IL binary. It then uses AOT compilation to pre-generate all the native code that the JIT would normally generate from the IL, then links this together with the JIT-less runtime into a single native binary that can be signed. Finally, the IL is stripped from the managed binary. leaving only metadata.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…