관광명소 검색화면에서 빠르게 스크롤 시 적합한 관광명소 이미지를 보여주지 못하는 문제 - boostcampwm-2021/iOS04-OwnMyWay GitHub Wiki
문제 상황
관광명소 화면을 CollectionView로 구성하였고 UIImageView에 Extension으로 URLSessionDataTask를 통해 이미지를 다운로드하게 구현했었다.
CollectionView의 Cell이 불러오면서 다운로드를 진행하는데 CollectionViewCell은 재사용이 되기 때문에 이미지가 다운로드가 완료된 시점에 이미지를 띄워서 이미지와 관광명소의 제목이 맞지 않는 문제가 발생했다.
문제 해결
CollectionView가 Cancel이 가능한 Cancellable 프로토콜을 채택한 변수를 가지고 있게 만들었다.
URLSessionDataTask에 Cancellable 프로토콜을 채택하고 cancel함수를 구현했다.
CollectionView Cell의 prepareForReuse 함수에서 cancellable Property를 cancel해주었다. 이러한 방식으로 구현하면 다운로드가 완료되지 않은 task들은 다운로드가 취소되어 완료된 이미지들만 일치하는 제목의 Cell에 그려진다.