Concurrency - CustomImageView 질문드립니다.
안녕하세요, 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이 바뀌고, 재전달되는 현상을 막기위한 로직이라고 간단하게 생각하셔도 될 것 같습니다. 좋은 답변이 되길 바라며...!
또 궁금한 것들은 질문주세요!
강의를 들어주셔서 고맙습니다. :)
오퍼레이션 큐 질문
0
147
2
2) 오퍼레이션큐(OperationQueue) 강의 질문입니다
0
153
2
warning 뜸
0
169
1
수업자료 markup 에 대해 궁금합니다!
0
285
1
예제 프로젝트 빌드 실패
0
344
2
serial 큐 질문드립니다.
0
261
1
[7-3.DispatchBarrier] 예제 코드 질문
0
337
1
안녕하세요, GCD 관련 질문드립니다..
0
292
1
main.async 작동 질문(+ vs global(),async)
0
442
1
dismiss 되었을 때 종료질문
0
314
1
'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.
0
511
2
Dependency Protocol 관련
1
376
1
시리얼 큐와 sync 관련
0
477
2
sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미
0
658
1
lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?
0
392
1
global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.
1
518
2
비동기 개념에서 무엇을 return하는 거죠??
0
398
1
안녕하세욤
1
349
1
Barrier 작업 관련 질문입니다.
1
350
1
디스패치 그룹
1
386
1
global async안에 global async를 만들게되면 어떻게 되나요??
2
393
2
동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다
1
296
2
비동기오퍼레이션 관련 질문
1
378
1
강의자료는 어디에 있나요?
1
328
1





