dispose

박동규·2023년 11월 22일
0

flutter

목록 보기
4/4

dispose 메서드는 Flutter의 StatefulWidget의 생명주기에 있는 매우 중요한 부분입니다. 이 메서드는 위젯이 영구적으로 제거될 때 호출되며, 이 시점에 필요한 정리 작업을 수행합니다. dispose의 주요 목적은 위젯에 의해 사용된 리소스를 해제하고, 메모리 누수를 방지하는 것입니다.

주요 기능 및 사용법

  1. 리스너 해제: 위젯이 리스너나 구독을 사용했다면, dispose에서 이러한 리스너와 구독을 해제해야 합니다. 이는 이벤트가 더 이상 발생하지 않을 때 필요없는 콜백이 호출되는 것을 방지합니다.
  2. 컨트롤러 닫기: 애니메이션 컨트롤러, 스트림 컨트롤러 등과 같은 컨트롤러들을 닫습니다. 이는 리소스를 정리하고, 메모리 누수를 방지하기 위해 필요합니다.
  3. 상태 정리dispose는 위젯의 상태와 관련된 다른 정리 작업을 수행하는 데에도 사용됩니다.

예시


void dispose() {
  // 컨트롤러 닫기
  myController.dispose();
  // 기타 정리 작업
  super.dispose();
}

이 예시에서는 myController라는 컨트롤러를 dispose에서 닫고 있습니다. dispose 메서드에서 super.dispose()를 호출하는 것도 중요합니다. 이는 상위 클래스의 dispose 메서드를 호출하여, 프레임워크 수준에서 필요한 정리 작업이 수행되도록 합니다.

중요성

dispose 메서드는 리소스 관리와 관련하여 매우 중요합니다. 이를 통해 앱의 성능을 유지하고, 메모리 누수를 방지할 수 있습니다. 특히, 앱의 상태가 복잡하거나 많은 리소스를 사용하는 경우, dispose 메서드의 올바른 구현은 필수적입니다. 리소스를 적절히 해제하지 않으면 앱의 성능 저하나 메모리 누수로 이어질 수 있습니다.

dispose() 내에서 super.dispose()

  • 순서dispose() 메서드에서 super.dispose()항상 메서드의 끝 부분에서 호출해야 합니다.
  • 이유dispose() 메서드에서는 리소스 해제와 같은 정리 작업을 수행합니다. super.dispose() 호출은 상위 클래스의 정리 로직을 실행하는데, 이것을 마지막에 호출함으로써 당신의 위젯 클래스에서 필요한 모든 정리 작업을 완료한 후에 상위 클래스의 정리 작업이 실행되도록 합니다.
  • 위험super.dispose()를 먼저 호출하면, 상위 클래스의 정리 로직이 실행된 후에 하위 클래스의 리소스 정리 코드를 실행하게 되어, 이미 해제된 리소스에 접근하려고 할 때 오류가 발생할 수 있습니다.
profile
내가 원하는 것을 만들자

0개의 댓글