この段落で説明したように、ビューコントローラーのビューのサブビューへのアウトレットは弱い可能性があります。これらのサブビューは、nibファイルの最上位オブジェクトによってすでに所有されているためです。ただし、アウトレットがウィークポインターとして定義され、ポインターが設定されている場合、ARCはランタイム関数を呼び出します。
id objc_storeWeak(id *object, id value);
これは、オブジェクト値をキーとして使用して、ポインター(オブジェクト)をテーブルに追加します。このテーブルは、ウィークテーブルと呼ばれます。ARCはこのテーブルを使用して、アプリケーションのすべてのウィークポインターを格納します。オブジェクト値が割り当て解除されると、ARCはウィークテーブルを反復処理し、ウィークリファレンスをnilに設定します。または、ARCは以下を呼び出すことができます。
void objc_destroyWeak(id * object)
次に、オブジェクトが登録解除され、objc_destroyWeakが再度呼び出します。
objc_storeWeak(id *object, nil)
弱い参照に関連するこの簿記は、強い参照のリリースに比べて2〜3倍長くかかることがあります。したがって、弱い参照は、アウトレットを強いと定義するだけで回避できるランタイムのオーバーヘッドをもたらします。
そして、私が指摘したい最後のオプションは、ストレージのタイプです。これは、強くても弱くてもかまいません。
一般に、特にコンセントをサブビューまたはビュー階層によって常に保持されるわけではない制約に接続する場合は、コンセントを強くする必要があります。
本当にアウトレットを弱くする必要があるのは、ビュー階層のバックアップを参照するカスタムビューがある場合だけで、一般的には推奨されません。
だから私は強いを選択するつもりであり、私は私の接続を生成する接続をクリックします。
IBOutletCollection()
なりませんweak
。そうでない場合はとして返されnil
ます。