개발자
swift 로 sns 기능을 구현 중에 있습니다. 메모리 관리를 위해 테이블 뷰로 피드 창을 구현하였는데 Pagination을 위하여 테이블뷰 셀 안에 스크롤뷰를 구현에 그 안에 frame에 맞춰 Imageview를 넣어주었습니다. 이 상황에서 무한 스크롤 , 새로고침 기능 시 셀 재사용으로 인하여 이전 셀의 이미지가 살짝 보였다가 현재의 이밎로 보이거나 override된 셀의 prepare reuseable 함수에서의 초기화를 함에도 깜빡이는 현상이 지속됩니다. 혹시 좋은 의견 있으신가 여쭤봅니다!
답변 1
이미지 셀이 깜빡하는 상황에서 고려해 볼 수 있는 문제는 1. 스레드 관리(데이터 로딩/ 렌더링 스레드 관리를 어떻게 해주고 있는지) 2. 1번이 잘 고려가 됐다면 이미지 캐싱 이렇게 보시면 어떨까요!?
양승완
작성자
협성대학교 컴퓨터공학과 • 2024년 05월 05일
셀이 재사용되는 상황에서 깜빡거리는 현상이 발생하는거 같습니다! 이미지는 kingfisher를 사용하였습니다! 첫번째 , 마지막 이미지만 새로고침 처리에 필요하기 때문에 그쪽 셀만 재사용하지 않고 새로운 셀로 처리하게 하였는데 스레드 관리를 통해서도 가능할까요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 04월 26일
이 스크립트에서 제시한 문제는 셀 재사용에 관련된 것으로 보입니다. 이러한 문제를 해결하는 한 가지 방법은 비동기적 이미지 로딩을 사용하는 것입니다. 테이블 뷰가 초기화되거나 셀의 내용이 변경될 때마다, 이미지를 다운로드하고 캐시하는 작업을 수행해야 합니다. 이 과정은 비동기적으로 이루어져야 하며, 이를 위해 DispatchQueue나 NSOperationQueue와 같은 도구를 사용할 수 있습니다. 또한, 각 셀에 대한 unique identifier를 설정하여 해당 셀에 대응되는 이미지만 표시하게 하는 것도 좋은 방법일 수 있습니다. 이렇게 하면 잘못된 이미지가 나타나는 현상을 피할 수 있습니다. 또 다른 방안으로는 SDWebImage와 같은 라이브러리를 사용하여 이미지 로딩과 캐싱을 자동화하는 것입니다. 코드 모양새로서 아래처럼 진행 될 수 있습니다. ```swift // Asynchronously download and cache the image let imageUrl: URL = //... your image url imageView.sd_setImage(with: imageUrl) { (image, error, cacheType, imageURL) in // If there's an error or no image, return early without fading in the image guard let image = image else { return } // Fade in the image self.imageView.alpha = 0.0 UIView.transition(with: self.imageView, duration: 0.5, options: .transitionCrossDissolve, animations: { self.imageView.image = image self.imageView.alpha = 1.0 }, completion: nil) } ``` 이 방법들을 시도해보시고 그 중 가장 효과적인 것을 선택하여 사용해 보세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!