안녕하세요 Foma 입니다!
오늘은 Firestore에서 addSnaptshotListener를 다룰때 주의해야할 점에 대해서 적어보려고 합니다.
addSnapshotListener를 사용할때 여러번 호출되는 경우인데요.
데이터가 바뀌었을때 딱 한번만 호출되게 하는 방법에 대해서 알아볼게요~
다음과 같이 addSnapshotListener를 사용하였을때 "listener called"라고 출력되게 해보겠습니다.
아래와 같이 listener called가 매우 많이 호출되는데요.
이것은 viewDidLoad가 실행되면 실행되는만큼 데이터가 바뀌었을때 배로 출력되게 됩니다.
왜 그럴까요?
addSnapshotListener는 말 그대로 SnapshotListener를 추가하는 것입니다.
그러므로 viewDidLoad가 될때마다 SnapshotListener가 추가되어 해당 주소의 데이터베이스의 데이터가
바뀔때 모든 추가된 addSnapshotListener가 실행되는 것이죠.
Solution
이것을 어떻게 더 추가되지 않게 혹은 하나만 추가할수 있을까요?
바로 addSnapshotListner를 지워주는 것입니다.
예를 들어 viewDidLoad 에서 addSnapshotListener를 추가해주었다면
viewWillDisappear 등 뷰가 사라질때 addSnapshotListner를 지워주는 것이죠.
먼저 리스너를 담아줄 변수를 하나 만들어줍니다,
그리고 다음과 같이 리스너 변수에 아래와 같이 addSnapshotListener를 사용한 주소를 넣어줍니다.
마지막으로 뷰가 사라질때 listener를 삭제해주면 리스너가 여러개 달리지 않고 뷰가 로드될때 딱 하나만 달릴수 있는거죠!!
Reference
댓글