1

ARCのself.view = nilについて疑問に思っています。

  1. self.view = nil に設定すると、self.view は自動的に解放されますか?
  2. self.view = nil に設定すると、すべてのサブビューが自動的に nil になり、解放されますか?

ありがとう

4

2 に答える 2

0

同じビュー (オブジェクトが nill されている) が他のオブジェクトによって使用されているかどうかによって異なります。オブジェクト参照のカウントは ARC が行います。したがって、同じオブジェクトが強く参照されている場合、ARC はそれを保持する必要があります。したがって、誰もオブジェクトを参照していない場合、self.view = nil は self.view を取り除きます。

ただし、すべてのサブビューに何が起こるかはわかりません。同じことを想像します。

于 2013-02-04T02:06:54.573 に答える
0

1) はい、他に強い参照が存在しないと仮定します (これは非常に大きな if であり、予期しない場所で発生する可能性があります)。保証されている唯一のことは、保持カウントが 1 減少することです。

2)上記の条件を満たしてビューが割り当て解除されるように設定されている場合、サブビューは自動的に解放されます (保持カウントが 1 減ります)。それらへの他の参照が存在しないと仮定すると (ポイント 1 を参照)、それらも割り当て解除されます。

すべては、オブジェクトへの強い参照の数に依存します。それを理解することは絶対に重要です。保持カウントがゼロに達した場合にのみ、オブジェクトの割り当てが解除されます。ARC の時点でこれを直接制御することはできませんが、それでも非常に関連性があります。

于 2013-02-04T02:14:27.390 に答える