
prepareForReuse()는 UIKit 프레임워크에서 UITableViewCell과 UICollectionViewCell 클래스에 정의된 메서드입니다. 이 메서드는 셀이 재사용되기 직전에 호출되며, 셀을 초기 상태로 재설정하는 데 사용됩니다. 테이블 뷰나 컬렉션 뷰에서 셀을 재활용할 때 이전 데이터가 새로운 셀에 남아있는 것을 방지하기 위한 목적으로 사용됩니다.
prepareForReuse()는 호텔 객실 청소와 같습니다. 한 손님이 체크아웃하고 다음 손님이 체크인하기 전에, 객실을 깨끗하게 청소하고 모든 것을 초기 상태로 되돌려 놓습니다. 이전 손님의 흔적(데이터)이 남아있으면 새로운 손님(새 데이터)에게 혼란을 줄 수 있기 때문입니다.
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var detailImageView: UIImageView!
var downloadTask: URLSessionDataTask?
override func prepareForReuse() {
super.prepareForReuse()
// 레이블 텍스트 초기화
titleLabel.text = nil
// 이미지 초기화
detailImageView.image = nil
// 진행 중인 네트워크 작업 취소
downloadTask?.cancel()
downloadTask = nil
}
func configure(with item: Item) {
titleLabel.text = item.title
// 이미지 다운로드 작업 설정
if let imageURL = item.imageURL {
downloadTask = URLSession.shared.dataTask(with: imageURL) { [weak self] data, _, _ in
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
self?.detailImageView.image = image
}
}
}
downloadTask?.resume()
}
}
}
이 예시에서:
1. prepareForReuse() 메서드를 오버라이드하여 셀이 재사용되기 전에 필요한 초기화 작업을 수행합니다.
2. 레이블 텍스트와 이미지를 nil로 설정하여 이전 데이터가 새 셀에 표시되지 않도록 합니다.
3. 진행 중인 네트워크 작업이 있다면 취소하여 불필요한 리소스 사용을 방지합니다.
cellForRowAt 또는 cellForItemAt 메서드에서 셀의 내용을 구성합니다.prepareForReuse() 메서드가 호출됩니다.이 과정을 통해 메모리 사용을 최적화하고 사용자 인터페이스의 일관성을 유지할 수 있습니다.