반응형
250x250
05-20 04:02
- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- Algorithm
- swift 알고리즘
- 정렬
- 정렬알고리즘
- 스위프트디자인패턴
- 인생 명언
- sort
- swift 코딩테스트
- swift split
- programmers
- 다트
- programmer
- 프로그래머스
- coding test
- dart
- rxswift
- swift
- 자료구조
- 스위프트
- 명언
- datastructure
- 감성에세이
- 프로그래머스 레벨2
- 디자인패턴
- 감성 에세이
- 코딩테스트
- 코테
- Design Pattern
- 프로그래머스 swift
- 알고리즘
Notice
Recent Posts
Recent Comments
Link
Archives
Bill Kim's Life...
[iOS] UITableView 셀 재사용 버그 — 데이터가 섞이는 진짜 이유 본문
728x90
반응형
개요
iOS에서 매우 흔한 문제:
👉 스크롤하면 셀 데이터가 이상해짐
예:
- 이미지가 다른 셀에 나타남
- 체크 상태가 섞임
- 이전 데이터가 남아있음
의미
UITableView / UICollectionView는:
👉 셀을 새로 만드는 게 아니라 재사용(reuse) 한다
즉,
- 이전 상태가 그대로 남아있을 수 있음
문제 코드
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let item = dataList[indexPath.row]
if item.isSelected {
cell.backgroundColor = .blue
}
return cell
}
👉 문제:
- isSelected == false일 때 아무 처리 안 함
- 재사용된 셀 → 이전 색상이 그대로 남음
해결 코드
방법 1: 상태 초기화 (가장 중요)
let item = dataList[indexPath.row]
// 기본 상태 초기화
cell.backgroundColor = .white
if item.isSelected {
cell.backgroundColor = .blue
}
👉 핵심:
- 모든 상태를 항상 다시 설정해야 함
방법 2: prepareForReuse 활용
class CustomCell: UITableViewCell {
override func prepareForReuse() {
super.prepareForReuse()
backgroundColor = .white
}
}
👉 효과:
- 재사용 시 자동 초기화
방법 3: 비동기 이미지 로딩 주의
cell.imageView?.image = nil // 초기화
loadImage(url: item.imageURL) { image in
DispatchQueue.main.async {
cell.imageView?.image = image
}
}
👉 안 하면:
- 다른 셀 이미지가 섞여 보임
한 줄 정리
👉 셀은 재사용된다 — 그래서 “항상 초기화”하지 않으면 데이터가 섞인다
728x90
반응형
'DEV Tips > iOS' 카테고리의 다른 글
| [iOS] NotificationCenter 버그 — removeObserver 안 하면 생기는 문제 (0) | 2026.03.22 |
|---|---|
| [iOS] 이미지 깜빡임 & 잘못된 이미지 표시 — 비동기 로딩의 함정 (0) | 2026.03.22 |
| [iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유 (0) | 2026.03.22 |
| [iOS] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다 (0) | 2026.03.22 |
| [iOS] iOS 메모리 누수의 핵심 — Retain Cycle 한 번에 끝내기 (0) | 2026.03.22 |
Comments
