Just writing this to try and clear up some still existing confusion:
In iOS, there are three ways that Apps can get some real background time when you tap the home button to go away from them:
1) They get 10 seconds and then they're frozen: Most apps are like this. These apps don't explicitly request any extra background time from the OS. This is the default mode for all iOS apps.
2) They get 10 minutes and then they're frozen: Any app can do this, but most don't. An App can request additional background time the moment you "home away" from them. Apps usually do this when they're finishing an upload or a download. If, by the time it reaches 10 minutes of background time, the App isn't done, it's forcibly frozen.
3) They get unlimited background time: There are three types of Apps that can get unlimited background time:
3.1) VoIP Apps (Skype, Fring): These apps have to be approved by Apple to get this backgrounding permission. They are allowed to remain running in the background as long as they're connected to their services. Once disconnected, "homing away" from them freezes them.
3.2) Audio Apps (Pandora, Instacast): These apps are closely watched by Apple when being approved so they don't abuse their stay in the background. They are allowed to remain running in the background as long as they're playing audio. Once paused, "homing away" from them freezes them.
3.3) GPS Apps (Waze, Garmin): These apps are also closely watched. They get to be in the background all the time in order to provide proper directions to the user. As far as my tests go with Waze, it must be explicitly closed (removed from the recent apps tray) in order to stop running in the background. I don't have Garming or Tom Tom's apps to test if they get frozen when not offering directions.
Note that when I say "frozen", the App is really frozen. It takes up RAM, but gets no CPU time and consequently no battery consumption.
There are also ways that apps can appear to be running in the background, but really are frozen:
1) Local notifications (Alarms, Timers): Apps can tell the OS to notify the user at X time in the future. They don't have to be running for these notifications to appear. They appear with the App's icon and everything, but come from the OS itself, even if the App is frozen. If you slide or tap the notification, the App gets brought back from the dead.
2) Push notifications (IM+, Twitter clients): Apps can subscribe with their own servers in order to receive push notifications. These notifications can pop up even when the App is frozen. It works like this:
2.1) The App subscribes with its own service server for push notifications.
2.2) When the user "homes away" from the App, the App gets its 10 seconds and freezes.
2.3) All the hard work is done in the service's server for you.
2.4) When something new arrives, the service's server pushes a notification to your device for you to deal with.
2.5) If you slide or tap the notification, the App gets brought dead from the dead.
Push notifications work well because every iOS device keeps a single connection with Apple's push notification servers. If you have one App that wants push notifications, that's one connection. If you have 10 apps that want push notifications, that's still one connection as opposed to every app being kept running in the background and each managing its own connection with its service server.
I wanted to write about memory consumption of background apps, but this post is already too long, right?
Sorry for the long post and hope it helps!