Outletにはweakを使う
きっかけはひとつのツイートから。
.@mfks17 あ!IBoutletも弱参照か。。。 @iphone_dev_jp [@tokyopengwyn]
— iphone_dev_jp (@iphone_dev_jp) June 8, 2012
自分はARCを利用するようになってからもずっと、weakではなくstrongを使用してOutletをプロパティ宣言し、viewDidUnload:やdeallocの中でOutletにnilを設定する方法をとっていたのだけれど、それでは動作上に問題があるのだろうか。心配になり調べてみると、すぐに次のような記事を発見。
Outlet には weak を | Cocoaの日々情報局
結論からいうと、strongを使用してOutletをプロパティ宣言しておきviewDidUnload:やdeallocの中でそれらにnilを設定するという方法でも問題はない。が、上の記事でまとめられているとおり、次のような方針に従いweakを使用するというのがより適切な方法のようだ。
- 通常 UIButton などのパーツは Ownerになる親ビューが存在するので weak が適している
- ただしトップレベルのビュー(どのビューにも属さない)の場合はOwnerとなる親ビューが存在しないので strongにする
たしかに、コードがすっきりするし、何かの間違いで循環参照になってしまう危険性を回避することもできるので、言われてみるとこの実装方法の方が良いように感じられる。