Hi, since I started iPhone/iPod Development I have come across some differences between how the simulator and how real device react. Maybe I will come across some other differences I will have to figure out as well, maybe other people haven't met these problems here (YET) and can profit from the knowledge, and maybe you know some problems/differences that you would have been happy to know about earlier before you spent several hours or days figuring out what the heck is going on.
So here is what I came across.
Simulator is not case sensitive, Devices are case sensitive.
This means a default.png or Icon.png will work in simulator, but not on a device where they must be named Default.png and icon.png (if it's still not working read this answer)
Simulator has different codecs to play audio and video
If you use f.e. MPMoviePlayerController you might play certain video on the simulator while on the device it won't work
(use Handbrake-presets-iPhone & iPod Touch to create playable videos for Simulator and Device).
If you play audio with AudioServicesPlaySystemSound(&soundID) you might here the sound on simulator but not an a device. (use Audacity to open your soundfile, export as wav and run afconvert -f caff -d LEI16@44100 -c 1 audacity.wav output.caf in terminal)
Also there is this flickering on second run problem which can be resolved with an
playerViewCtrl.initialPlaybackTime = -1.0;
either on the end of playing or before each beginning.
Simulator is mostly much faster cause it doesn't simulate the hardware but uses Mac resources, therefore f.e. sio2 Apps (OpenGL,OpenAL,etc. framework) run much better on simulator, well everything that uses more resources will run visibly better in simulator than on device.
I hope we can add some more to this.