Interesting writeup from Justin Williams about the use of Tab Bars in iPhone development. One of his big gripes is related to the space the tabbar uses:
When I made the decision, my thinking was that the application had four separate features, so it only made sense to separate them using the tab bar. What I found as I got further into the development of the application was that the bottom tab bar was incredibly limiting for where to place extra controls.
The main problem here is that by default a Tab Bar is visible in all views of the application. I much prefer Tweetie‘s implementation, where the tab bar is only visible on list views, and pushed away on the detail views. Of course, this layout is actively discouraged by Apple, who recommend you put your navigation controller *inside* each tab bar. They do it the opposite way themselves in itunes tho.
Also, the interaction allowed by the Tab bar is really limited. You cannot easily disable and enable a tab, for instance. Still, I believe this way of presenting data has merit, specially in giving non-technical users a clear overview of the main parts of your application.
*update* As Ross Boucher points out you can also hide the Tab Bar by setting the “hidesBottomBarWhenPushed” property on your controllers. An important gotcha with this is to make sure you only set it on the first level controllers.