1. ホーム
  2. ios

[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?

2022-03-18 02:38:32

質問

ARCを使用してiOS 5専用に開発しています。その際 IBOutletUIView s(およびサブクラス)は strong または weak ?

以下の通りです。

@property (nonatomic, weak) IBOutlet UIButton *button;

これをすべて取り除くことができるだろう。

- (void)viewDidUnload
{
    // ...
    self.button = nil;
    // ...
}

このようなことをしても問題はないのでしょうか?テンプレートは strong は、'Interface Builder' エディタからヘッダに直接接続したときに自動生成されるプロパティと同じですが、なぜでしょうか?その UIViewController はすでに strong を参照することで、その view で、そのサブビューを保持します。

解決方法は?

現在Appleが推奨するベストプラクティスは、IBOutletsが 強い ただし 弱い は、retainサイクルを回避するために特に必要です。上記のJohannesさんのように、WWDC2015の"Implementing UI Designs in Interface Builder"のセッションで、Appleエンジニアがコメントしていたことでもあります。

そして、最後に指摘したいオプションは、ストレージのタイプで、次のようなものがあります。 は強いか弱いかのどちらかです。一般に、アウトレットは 特に、アウトレットをサブビューに接続する場合や 常にビューに保持されるとは限らない制約を持つ 階層になります。アウトレットを弱くする必要があるのは、次のような場合だけです。 カスタムビューで、ビューの上位にあるものを参照する場合。 一般的には、これは推奨されません。

IBチームのエンジニアにTwitterでこのことを質問したところ、次のことを確認しました。 強い はデフォルトであるべきで、開発者向けドキュメントが更新されていることを確認しました。

https://twitter.com/_danielhall/status/620716996326350848 https://twitter.com/_danielhall/status/620717252216623104