IBOutlet の weak or strong 問題

xibファイルでユーザインターフェースを作成してクラスのプロパティに結びつける時に、

これを weak にするか strong にするか迷った。

ネットを漁ったら weak が好ましいようなことを書いてるのを見つけたのでそうしていたのだが、上記のようにカスタムテーブルセルをxibで作ってoutletで結びつけてテーブルに表示させる場合にweakだと落ちるケースがあった。

StoryboardでなくxibからTableViewControllerを作成し、カスタムセルをxib側で作成して propertyにIBOutletでつないでる場合、すぐには表示されないセクションの中のセルは weakだといつの間にか破棄されてnilになっていて、いざそのセルが必要になった時にはもうない、という事態が発生した。当然strongだとそうならない。

なのでこのケースについては strong でないといけないようだ。
Storyboardの時はしらん。
他の場合については循環参照の心配が無くもないのでケースバイケースだが、
「循環参照が心配だからとりあえずweakにしとけばオーケー」というワケではない場合もある
ので注意が必要ですよ。というおはなし。