弱参照(weak)
がよく分からなかったので調べました。
弱参照(weak)
を理解するためには、それなりにいくらか知識が必要で、他の記事にはたくさんの説明があってなにがなんだか分からなくない。おそらくみなさんもそうだったはず。
なので、すごく簡単にまとめます。
weak(弱参照)とは
Swiftでは、コンバイル時に参照カウント
の増減を自動でやってくれて(ARC
)、処理の記述漏れによるメモリリーク
をほとんどのケースで気にせずにコーディングできる。
この参照カウントの増減を自動でやってくれる参照が 強参照(strong)
で、デフォルトではクラスのインスタンスは強参照になる。
しかし、関連のある複数のクラスのインスタンス同士をお互いに強参照で保持すると、 循環参照
となりメモリリークする場合があるため、循環参照をさけるために使う1つの方法が弱参照(weak)。(もう1つの方法はアンオウンド参照(unowned)だがここでは説明しない。)
例:
外部のオブジェクトを保持して、外部のオブジェクトに対して通知を行うdelegateに関しては、循環参照がおきてしまいメモリリークする場合があるから 弱参照(weak)
で保持する必要がある。
さいごに
弱参照(weak)を理解するために、知っておきたいワードをいくつかあげます。(以下ワードを理解できれば、この記事を理解できるはずです)
· 参照渡し
· ガーベージコレクション
· メモリリーク
· 参照カウンター
· ARC(Automatic Reference Counting)
· 循環参照