• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

Concurrency-Better 프로젝트 내 로직 관련 질문 드립니다.

21.01.28 02:24 작성 조회수 120

1

안녕하세요 앨런님! 여전히 감사한 마음으로 강의 잘 듣고 있습니다 :)  

다름이 아니라, 해당 프로젝트에서 loadImage(with:) 함수 안의 로직 중 이해가 잘 가지 않는 부분이 있어 질문드립니다.

해당 함수에서 "마지막으로 이미지를 다운로드한 String 경로와 해당 경로를 URL로 변환 후 추출한 absoluteString 값이 맞지 않으면 return 을 하는 부분"이 왜 필요한지 잘 이해가 가지 않습니다.

(거창히 말씀드렸지만 사실 if self.lastImgUrlUsedToLoadImage != url.absoluteString { return } 부분입니다..ㅎㅎ)

이 두 값이 일치하지 않는 상황이 잘 떠오르지 않아 이 부분이 왜 필요하지?라는 생각이 드는데, 혹시 해당 상황은 어떤 경로로 재현이 될까요?

동시성과 관련된 질문은 아니지만..ㅎㅎ 그래도 궁금해서 글 남깁니다! 감사합니다 :) 

답변 3

·

답변을 작성해보세요.

1

네네 그죠! 테이블뷰의 셀의 재사용 때문에

셀 객체와 매칭되던 CustomImageView 객체간에 indexPath가 틀어지는 현상이 발생하는 것 같아요!

셀에서 다운로드 작업을 시키면 일반적으로 이러한 현상이 

발생했던 것으로 기억합니다.^^;

좋은 저녁시간 되세요 수진 님 :)

1

아하 cell이 재사용되기 때문에 생기는 문제겠군요,,!

cell A가 "a"라는 url 을 전달받고 이미지를 로드하고 있는 와중에, 사용자가 스크롤을 하면 cell A 가 다시 재사용되고 새로운 url이 indexPath를 통해 전달 될테니까요! 이는 기존에 요청했던 네트워크 요청을 했던 "a" url 과 일치하지 않는 상황이기때문에 return 시켜주는 거군요.. (맞..겠죠? ㅎ)

답변 감사합니다~!

1

네 안녕하세요 수진님!ㅎㅎ

그 아마, 해당 부분을 프로젝트에서 해당 코드를 지워보시고,
위아래로 빠르게 스크롤 해보시면 알게되는데요!
(그러면, 원래 표시하려던 이미지들의 셀 위치가 아마 뒤죽박죽으로 바뀔겁니다..)

실제 셀에서 이미지 다운로드 하는 작업들을 비동기적으로 보냈기 때문에..
다운로드하는 작업은 오래 걸리고...

실제 다운로드가 완료된 시점에서 셀의 IndexPath와 실제 셀들이
위치한 순간이 달라질 수가 있다는 것이죠.. 그래서 그것을 다시한번 확인하는 차원에서

실제 View의 lastImgUrlUsedToLoadImage 변수에 저장했던 url과
다운로드 완료된시점에서의 url을 다시한번 일치하는지 맞춰보는 코드에 불과합니다.. ^^;

답변이 잘 되시길 바랍니다. :)

감사합니다!