In iOS 6.0, Apple introduced the newer dequeueReusableCellWithIndentifier:withReuseIdentifier, which guarantees that a cell is returned if given a proper reuseIdentifier. With this newer method, you need to register the cell, probably in viewDidLoad, but it makes your cellForRowAtIndexPath a bit cleaner. This also mirrors what you would do in a UICollectionView.
Personally, I like to start off with the old way since it’s easier to customize a cell without subclassing if I’m prototyping something. Then when I’m farther along, I may choose to subclass the cell and then I’d clean up and simplify the UITableView code.