There are a number of important differences between the simulators and the real devices, some of them are:
- Enforcement of code signing restrictions on some APIs (can be enabled on the simulator, but off by default)
- Nuances of opening network connections (its more complicated if you want it to always work on a real device)
- Performance of storage I/O (i.e. loading/saving data from an SD card)
- Performance of floating-point math (real device has no FPU, so its slower)
- General performance (simulator tends to be faster, for the most part)
So for 99.9% of your development, the simulator is fine. But you should still test on a real device. Also, please make scalable UIs that dynamically size themselves based on the screen size. Every time I see a device-size-specific UI, it makes me want to strange the developer. (because they either have a zillion builds of their app, it bloat it all the way out with tons of fixed-size graphics)