0

可変サブビューを持つビューがあります。サブビューは、このサブビューのタイプを記述する列挙型を使用して設定されます。私の質問は、以下が強い参照サイクルを引き起こすかどうか、またはこれを行うためのより良い方法があるかどうかです:

class ControlBar: UIView {

    var item = [ControlBarItemType : ControlBarItem]()

    func set(with types: [ControlBarItemType]) {

        for type in types {
            let newItem = ControlBarItem(frame: CGRect(), type: type)
            //constraints and stuff
            self.addSubview(newItem)
            item[type] = newItem

        }
    }
}

辞書が弱いとは言えません。そのため、スーパービューには、サブビュー階層内の各 ControlBarItem への参照と、タイプ別にインデックス付けされたこの辞書への参照があります。これは、ControlBar のデリゲートとして機能する viewController から BarItem の状態を変更する必要がある場合があるためです。

4

3 に答える 3

0

これについて生産的に考えるには、単純にしてください。サイクルを探します。

  • ControlBar は、ControlBarItems への強い参照を保持しています。

  • したがって、自問すべき質問は、ControlBarItem は、それを含む ControlBar への強い参照も保持するかということです。

答えが「はい」の場合、保持サイクルがあります。答えが「いいえ」の場合、そうではありません。

そして、答えはノーのようです。

(詳しく説明すると、ビューにはそのスーパービューへの強い参照がありません。また、ControlBarItemに、それを含むControlBarへの強い参照を渡すことはありません。ControlBarItemに、それを含むControlBarへの参照与える必要がある場合、心配するとき: これが強い参照ではないことを確認する必要があります。)

于 2016-11-18T17:47:58.323 に答える