• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

Concurrency - CustomImageView 질문드립니다.

21.07.12 10:49 작성 조회수 123

1

안녕하세요, Concurrency 부분을 확인하고 있던 중

CustomImageView Class에서 lastImgUrlUsedToLoadImage 라는 프로퍼티가 있는데, 해당 프로퍼티는 왜 존재하는 것인지 궁금합니다!

이런 로직이 있던데, url과 lastImgUrlUsedToLoadImage가 다를 경우가 있나요!?

답변 1

답변을 작성해보세요.

1

안녕하세요!

"왈왈234"님.

컬렉션뷰 셀 자체도 class의 인스턴스이고, 또 커스텀이미지뷰도 class로 생성한 인스턴스라서, 결론적으로 셀의 하나하나의 인스턴스에 커스텀이미지뷰의 인스턴스도 할당시킨.. 이런 방식으로 컬렉션뷰가 동작을 합니다.

네, 그런데 여기서 문제는 일반적인 경우에는 별 상관이 없는데.. 만약 다운로드 받는 동안 위아래로 빠르게 스크롤을 해보시면.. 원래 표시하려던 이미지들의 위치가 뒤죽박죽으로 바뀌는 것을 보실 수 있습니다... (즉, 해당부분의 코드를 지우신 다음에 스크롤을 위아래로 해보시면 어떤 현상이 발생하는지 알 수 있습니다 ^^) 

처음 셀을 생성시에는 indexPath를 통해, 하나의 url이 전달이 되는데.. 실제 셀에서 이미지 다운로드하는 작업들은 조금 오래걸리고(비동기적인 동작이기도 하고).. 실제 다운로드가 완료된 시점의 셀의 indexPath의 url과 실제 셀들이 위치한 순간의 url이 달라질 수 있게 되는 것이죠. (컬렉션뷰 셀의 인스턴스는 재사용을 하니까요.)


다시 말씀드리면.. 즉, cell A가 어떤 "주소a"라는 url을 전달받고.. 이미지를 받고 있는 중에 사용자가 스크롤을 하면 cell A는 다시 재사용이 되어서, 새로운 "주소b"를 또 전달받게 될 수 있게 됩니다.. (그리고 컬렉션뷰의 cellForItemAt 데이터소스 관련 메서드는 스크롤 할때마다 반복적으로 실행하는 메서드 이기도 하고요.)

그래서, 단순하게 셀의 재사용으로 인해, url이 바뀌고, 재전달되는 현상을 막기위한 로직이라고 간단하게 생각하셔도 될 것 같습니다. 좋은 답변이 되길 바라며...!

또 궁금한 것들은 질문주세요!

강의를 들어주셔서 고맙습니다. :)

왈왈234님의 프로필

왈왈234

질문자

2021.07.12

감사합니다. 개인적으로 table cell의 reuse 현상 때문이라고 추측은 했지만, 확실한 답을 얻고 싶어 질문드리게 되었습니다. 빠른 답변 감사드립니다!

감사합니다 ㅎㅎㅎ 👍🏻👍🏻👍🏻