weak とは
・循環参照を防ぐために使用されるキーワード
主にメモリ管理のコンテキストで使われ、オブジェクト間の参照が弱い(non-owning)参照であることを示します。
循環参照とは
2つ以上のオブジェクトが互いに強い参照を持つことで、メモリから解放されなくなる問題。これによりメモリリークが発生する。weakはこの問題を解決するための手段の一つです。
循環参照などが発生すると、参照カウントがゼロにならず、オブジェクトの生存期間が終了しません。これにより、メモリリークが発生します。弱い参照(weak)や非所有参照(unowned)を使用して循環参照を防ぐことが重要です。
弱い(non-owning)参照
・オブジェクト間の参照が弱い(non-owning)参照とは、オブジェクトAがオブジェクトBを参照しているが、その参照によってオブジェクトBの生存期間を管理しないことを意味します。
・弱い参照(weak参照)は参照先オブジェクトの参照カウントを増やしません。そのため、参照先オブジェクトが他の強い参照を持たない場合、参照カウントが0になり、メモリから解放されることが可能です。
weakの特徴
1.弱い参照(Non-owning reference): weakによる参照はオブジェクトを所有しません。参照されているオブジェクトの参照カウントを増やしません。
2.自動的にnilに設定される: 参照されているオブジェクトが解放されると、weak参照は自動的にnilに設定されます。このため、weak参照はオプショナル型(Optional)である必要があります
参照カウント
・メモリ管理のための技術で、オブジェクトがメモリから解放される時期を管理する仕組み。
・あるオブジェクトに対する参照をカウントし、そのカウントがゼロになったときオブジェクトをメモリから解放します。
関連用語
関連用語 | 説明 |
---|---|
メモリリーク | コンピュータで実行中のプログラムが確保したメモリ領域の解放を忘れたまま放置してしまい、利用可能な空き領域が失われる現象。動作の不具合を招く。 |
コンテキスト | 利用者の意図や状況、環境などの総体を表したり、同じ処理や記述でも状況に応じて動作などが異なる場合に、その選択基準となる判断材料や条件などを指す |
生存期間 | オブジェクトが生成されてからメモリから解放されるまでの間を意味する。オブジェクトがメモリに存在し、アクセス可能な期間のことを指します。 |
参考サイト