Swift-arc-overview
Swift-ARCの概要
メモリ管理機能とその使用は、Automatic Reference Counting(ARC)を通じてSwift 4言語で処理されます。 ARCは、システムリソースを初期化および初期化解除するために使用され、インスタンスが不要になったときに、クラスインスタンスによって使用されていたメモリスペースを解放します。 ARCは、コードインスタンス間の関係に関する情報を追跡して、メモリリソースを効果的に管理します。
ARCの機能
- ARCは、init()によって新しいクラスインスタンスが作成されるたびに、情報を格納するためにメモリのチャンクを割り当てます。
- インスタンスタイプとその値に関する情報はメモリに保存されます。
- クラスインスタンスが不要になった場合、deinst()により、クラスインスタンスの保存と取得のためにメモリスペースが自動的に解放されます。
- ARCは、現在参照しているクラスインスタンスのプロパティ、定数、および変数を追跡し、deinit()が未使用のインスタンスにのみ適用されるようにします。
- ARCは、これらのクラスインスタンスプロパティ、定数、および変数への「強い参照」を維持して、クラスインスタンスが現在使用されている場合に割り当て解除を制限します。
ARCプログラム
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
ARC強参照サイクルクラスインスタンス
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
ARCの弱参照と非所有参照
クラス型プロパティには、強参照サイクルを解決する2つの方法があります-
- 弱い参照
- 所有されていない参照
これらの参照は、あるインスタンスが参照サイクルで他のインスタンスを参照できるようにするために使用されます。 その後、インスタンスは、強い参照サイクルを気にする代わりに、すべてのインスタンスを参照する場合があります。 いくつかのインスタンスが「nil」値を返す可能性があることをユーザーが知っている場合、弱参照を使用してそれを示すことができます。 インスタンスがnilではなく何かを返す場合、所有されていない参照で宣言します。
弱い参照プログラム
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
未所有の参照プログラム
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
クロージャの強力な参照サイクル
特定のインスタンスをキャプチャするためにクラスインスタンスプロパティとクロージャーの本体にクロージャーを割り当てると、強い参照サイクルが発生する可能性があります。 クロージャーへの強い参照は、「self.someProperty」または「self.someMethod()」によって定義されます。 強参照サイクルは、クロージャの参照タイプとして使用されます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
弱い参照と所有されていない参照
クロージャーとインスタンスが相互に参照する場合、ユーザーはクロージャー内のキャプチャを非所有参照として定義できます。 その場合、ユーザーが同時にインスタンスの割り当てを解除することはできません。 インスタンスがいつか「nil」値を返すと、弱いインスタンスを持つクロージャが定義されます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-