質問:
次のコードを考えてみましょう:
<code class="language-c#">MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null;</code>
pClass はガベージ コレクションされますか?それとも、それが持続してイベントをトリガーし続けるのでしょうか?次のようなイベントの登録を解除する必要がありますか:
<code class="language-c#">MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass.MyEvent -= MyFunction; pClass = null;</code>
答え:
イベント発行者によるガベージコレクション:
MyEvent へのサブスクリプションは、pClass (パブリッシャー) のガベージ コレクションには影響しません。
ターゲットオブジェクトのガベージコレクション:
一般に、ガベージ コレクションの動作は、MyFunction がインスタンス メソッドであるか静的メソッドであるかによって異なります。
その他の注意事項:
以上がイベント ハンドラーはオブジェクトのガベージ コレクションを防止しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。