Xcode4.2以降のUITableViewCell取得メソッドはnilを返さない

最新のXcode、StoryBoardを使用したUITableViewを使うケースでは上述したメソッドでは既にnilは戻らないと聞いていたのだが、実際にはnilが戻るのだ。
そして、nilが戻る原因が分からない。

色々な方が書いているサンプルコードではほぼ間違い無くnilをチェックしてUITableViewCellの代替インスタンスを生成するコードを書いているので、正直な所「nilは戻らないはず」と書いている自分に自信がなくなってきた。

なのでもう一度調べてみたがちゃんとあった。それも本家のドキュメントに。
Configuring Table Views - Converting to Storyboards Release Notes

The dequeueReusableCellWithIdentifier: method is guaranteed to return a cell (provided that you have defined a cell with the given identifier). Thus there is no need to use the “check the return value of the method” pattern as was the case in the previous typical implementation of tableView:cellForRowAtIndexPath:. Instead of:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure and return the cell.

ということでXcode4.2, iOS5以降、storyboardを使ったUITableView(Controller)の実装で、"Dynamic Prototypes"形式でデザインする場合、dequeueReusableCellWithIdentifier:CellIdentifierメッセージはUITableViewCellの識別子(identifierプロパティ)を設定している場合、必ずそのセルのインスタンスを返すことが保証されている。※

つまりnilが戻るということは何処か(コード、プロパティ、その他)に問題がある、ということでFAであり、ネットに散見されるnilチェックのあるコードは間違いではなく、Xcode4.2、Storyboard以前ということなのだ。

※同リンクのドキュメント読めば解るがこれは"Dynamic prototypes"の場合。"Static Cells"の例ではIBOutletでプロパティに接続しているケースで書いているが、原理は"Dynamic Prototypes"と同じでInterfaceBuilderで定義したUITableViewCellはきちんとインスタンスを取得できるはずだ。