メモリ管理
メモリリーク、クリーンアップ、useEffect cleanup、listeners、timers、大きな画像の処理
1React Native アプリケーションにおける memory leak とは何ですか?
React Native アプリケーションにおける memory leak とは何ですか?
回答
memory leak は、メモリ上のオブジェクトがアプリケーションで使われなくなったにもかかわらず、それらへの参照がまだ残っているために garbage collector が解放できないときに発生します。React Native では、クリーンアップされていない subscription、unmount 後も動き続ける timer、古い参照を捕捉した closure などでよく起こります。memory leak はパフォーマンスを徐々に低下させ、長時間のセッションでクラッシュを引き起こすことがあります。
2メモリ管理において useEffect の戻り値の関数(cleanup function)はどのような役割を果たしますか?
メモリ管理において useEffect の戻り値の関数(cleanup function)はどのような役割を果たしますか?
回答
useEffect が返す cleanup function は、コンポーネントが unmount される前、または新しい依存関係でエフェクトが再実行される前に実行されます。その主な役割は、エフェクトが確保したリソースをクリーンアップすることです。subscription のキャンセル、clearTimeout/clearInterval、event listener の削除、進行中のリクエストの中断などを行います。このクリーンアップがないと、これらのリソースはメモリ上に残り続け、unmount されたコンポーネントを更新しようとすることがあります。
3useEffect の cleanup function で clearTimeout と clearInterval を使うことが重要なのはなぜですか?
useEffect の cleanup function で clearTimeout と clearInterval を使うことが重要なのはなぜですか?
回答
setTimeout や setInterval で作成された timer は、コンポーネントが unmount された後も実行され続けます。timer の callback が unmount されたコンポーネントの state を更新しようとすると、'Can't perform a React state update on an unmounted component' という warning が発生し、memory leak になります。timer は callback とその closure への参照を保持するため、garbage collector がこれらのリソースを解放できません。cleanup で clearTimeout/clearInterval を使うことで、これらの timer を適切にキャンセルできます。
React Native で event listener を使うときに memory leak を防ぐにはどうすればよいですか?
React Nativeコンポーネントにおいて、closureはメモリ管理にどのような影響を与えますか?
+17 面接問題