Pengendali Acara dan Pengumpulan Sampah: Pandangan Lebih Dekat
Memahami cara pengendali acara berinteraksi dengan pengumpulan sampah adalah penting dalam konteks pengaturcaraan tertentu. Mari kita periksa hubungan antara penerbit acara dan pengendali mereka.
Pertimbangkan coretan kod ini:
<code>MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null;</code>
Adakah pClass
akan dikumpul sampah? Jawapannya ya, langganan acara itu sendiri tidak menghalang koleksi penerbit. Walau bagaimanapun, butirannya bergantung pada sama ada MyFunction
ialah kaedah statik atau contoh.
Kaedah Statik vs. Contoh sebagai Pengendali
Perwakilan yang merujuk kaedah contoh mengekalkan rujukan kepada tika itu. Ini bermakna langganan acara boleh menghalang kutipan sampah. Walau bagaimanapun, sebaik sahaja penerbit acara (pClass
) layak untuk koleksi, kebimbangan ini dihapuskan.
Sebaliknya, jika MyFunction
statik, perwakilan tidak memegang rujukan contoh, sekali gus tidak menimbulkan halangan kepada kutipan sampah.
Mencegah Kegigihan Objek
Menggunakan pengendali acara berasaskan contoh bermakna penerbit (pClass
) menyimpan rujukan kepada objek pengendali. Sebaliknya adalah tidak benar; pengendali tidak menghidupkan penerbit.
Oleh itu, jika anda mahu objek pengendali dikumpul sampah, berhenti melanggan acara itu tidak perlu. Tetapi, jika jangka hayat penerbit melebihi jangka hayat pengendali, berhenti melanggan menjadi penting untuk mengelakkan kegigihan pengendali yang tidak diingini.
Peristiwa Statik dan Pengendali Contoh: Satu Kata Awas
Menggunakan acara statik dengan pengendali berasaskan contoh memerlukan pertimbangan yang teliti. Kekurangan rujukan contoh dalam perwakilan statik boleh menyebabkan objek pengendali kekal dalam ingatan selama-lamanya, yang berpotensi menyebabkan kebocoran memori.
Atas ialah kandungan terperinci Adakah jenis pengendali acara mempengaruhi pengumpulan sampah penerbit acara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!