StreamSubscription은 반드시 cancel 해주세요
StreamSubscription은 반드시 cancel 해주세요
dart:async의 StreamSubscription 인스턴스는 사용한 뒤 반드시 cancel을 호출해 주세요. 구독을 취소하지 않으면 메모리 누수나 예상치 못한 동작이 생길 수 있어요.
본문
dart:async의 StreamSubscription 인스턴스에는 cancel을 호출하는 걸 권장해요.
StreamSubscription을 취소하면 메모리 누수와 예상치 못한 동작을 막을 수 있어요.
BAD 예시:
class A {
StreamSubscription _subscriptionA; // LINT
void init(Stream stream) {
_subscriptionA = stream.listen((_) {});
}
}
BAD:
void someFunction() {
StreamSubscription _subscriptionF; // LINT
}
GOOD 예시:
class B {
StreamSubscription _subscriptionB; // OK
void init(Stream stream) {
_subscriptionB = stream.listen((_) {});
}
void dispose(filename) {
_subscriptionB.cancel();
}
}
GOOD:
void someFunctionOK() {
StreamSubscription _subscriptionB; // OK
_subscriptionB.cancel();
}
알려진 제한 사항
이 규칙은 StreamSubscription이 만들고 취소되는 모든 패턴을 추적하지는 못해요. 자세한 내용은 linter#317를 참고해 주세요.
활성화하기
cancel_subscriptions 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 cancel_subscriptions를 추가하면 돼요.
linter:
rules:
- cancel_subscriptions
만약 linter 규칙을 YAML 맵 문법으로 설정한다면 linter > rules 아래에 cancel_subscriptions: true라고 적어 주면 돼요.
linter:
rules:
cancel_subscriptions: true
더 알아보기
- Linter rules 목록에서 다른 규칙도 살펴볼 수 있어요.
Stream과StreamSubscription사용법은 dart:async 라이브러리 문서에서 확인해 보세요.