甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

Outletにはweakを使う

きっかけはひとつのツイートから。

自分はARCを利用するようになってからもずっと、weakではなくstrongを使用してOutletをプロパティ宣言し、viewDidUnload:やdeallocの中でOutletにnilを設定する方法をとっていたのだけれど、それでは動作上に問題があるのだろうか。心配になり調べてみると、すぐに次のような記事を発見。
Outlet には weak を | Cocoaの日々情報局

結論からいうと、strongを使用してOutletをプロパティ宣言しておきviewDidUnload:やdeallocの中でそれらにnilを設定するという方法でも問題はない。が、上の記事でまとめられているとおり、次のような方針に従いweakを使用するというのがより適切な方法のようだ。

  • 通常 UIButton などのパーツは Ownerになる親ビューが存在するので weak が適している
  • ただしトップレベルのビュー(どのビューにも属さない)の場合はOwnerとなる親ビューが存在しないので strongにする

たしかに、コードがすっきりするし、何かの間違いで循環参照になってしまう危険性を回避することもできるので、言われてみるとこの実装方法の方が良いように感じられる。