firebase fetch 실험_순서,mainthread,other thread

hankyulee·2021년 10월 1일
0

thread

목록 보기
2/2

앱 오답처리 중 thread관련 실험을 하기위해 breakpoint와 main thread에서 일하는지를 살펴보았다. 버튼을 눌렀을때, firebase에서 데이터를 가져와서 텍스트뷰에 나타내는 실험이다. 따라서 버튼을 눌렀을 때 함수부터 텍스트뷰에 출력하는 데 까지 20개 정도 breakpoint를 잡았다.
print(OperationQueue.current == OperationQueue.main)도 이용하였다.

1.loader관련

  • 로딩하는 창은 completion handler에 두는게 맞겠다. 왜냐하면 데이터를 가지고 와야지 로딩이 끝났다고 할 수 있으므로. 따라서 아래것은 잘 못한것이다.

2.loader틀린것
그래서 다음과 같이 fetch를 완료한 Completion에 삽입하였다.

3.

  • 다음과같이 작성했을때 nil을 출력했다. 45678이 속전속결로 진행된다 즉 아직 fetch하지 않았는데 가지고오라고 하는격. 특별히 다른 thread로 옮기지 않으면 main에서 작동한다.

  • 컴플리션핸들러를 가진 함수안에 컴프리션핸들러를 가지면, 그 안에있는 컴플리션헨들러가 먼저끝나야 가장 겉에있는 컴플리션헨들러라 마지막으로 사용된다. 즉 안에것이 해결되야 가장 겉에것이 진행할 수 있다. 주석 숫자를 보면 확인할 수 있다.

  • 왜 4 냐면 선언한 함수에서 컴플리션헨들러 부분을 안거치고 왔기때문.아직 completion하지 않았으므로.. 거쳤더라면 한 10정도 됐어야했다.

  • 다른스레드로 보내면 다른 쓰레드로 보냈다고 알려준다.

  • 아래주석을 보면 알 수 있듯이, 디스패치큐 글로벌로 보내고 바로 리턴해야하는데 print(155)를 바로 실행하더라. 왜냐하면 아직fetch가 completion되지 않아서 저거 밖에 할게 없기때문.

0개의 댓글