Skip to content

Latest commit

ย 

History

History
67 lines (39 loc) ยท 4.33 KB

prepareForReuse.md

File metadata and controls

67 lines (39 loc) ยท 4.33 KB

prepareForReuse์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

Answer

prepareForReuse์™€ cell ์žฌ์‚ฌ์šฉ ๋ฌธ์ œ

์šฐ๋ฆฌ๊ฐ€ ์ปฌ๋ ‰์…˜ ๋ทฐ, ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ ์‚ฌ์šฉ ํ•  ๋•Œ ์…€์„ ์žฌ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ทธ๋•Œ cell์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ด ์ž˜๋ชป๋˜์–ด ๋‚˜์˜ค๊ฑฐ๋‚˜ ๋ฒ„๋ฒ…์ด๋Š” ๋“ฏํ•œ ํ˜„์ƒ์„ ๋ณด์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ ์ด ์žˆ์„๊ฒƒ์ด๋‹ค.
์ด ํ˜„์ƒ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” cell์ด ์–ด๋–ป๊ฒŒ ์žฌ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์ ์ด prepareForReuse ํ˜ธ์ถœ ์‹œ์ ์ด๋‹ค. prepareForReuse ์ž์ฒด์˜ ์ •์˜๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ค€๋น„๋ฅผ ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์™œ ์žฌ์‚ฌ์šฉ์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ์ค‘์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ข‹์„๊ฒƒ์ด๋‹ค.

Cell์€ ์–ด๋–ค ๊ณผ์ •์œผ๋กœ ์žฌ์‚ฌ์šฉ ๋ ๊นŒ

cell์„ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด tableView, collectionView์—์„œ dequeueReusableCell(withIdentifier: )๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: TestCell.identifier, for: indexPath) as? TestCell else { 
            fatalError("Cell Not Found")
        }

        // ...

        return cell
    }

์žฌ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ณผ์ •์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” dequeueReusableCell(withIdentifier: ) ๋‚ด๋ถ€๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ คํ•œ๋‹ค.

dequeueReusableCell(withIdentifier: ) ์˜ ์ด๋ฆ„์„ ์ฒœ์ฒœํžˆ ์‚ดํŽด๋ณด๋ฉด dequeue, Reuse, Cell ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
ํ…Œ์ด๋ธ” ๋ทฐ๋‚˜ ์ปฌ๋ ‰์…˜ ๋ทฐ ๋ชจ๋‘ ์…€์„ ์žฌ์‚ฌ์šฉ(Reuse)ํ•˜๋Š”๋ฐ, ์…€๋“ค์˜ ์žฌ์‚ฌ์šฉ ๊ตฌ์กฐ๋Š” ํ(queue)๋กœ ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ž˜์„œ dequeue๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค.

์œ„ ์‚ฌ์ง„์€ ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„๋ณผ ๊ณผ์ •์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ์‚ฌ์ง„์ด๋‹ค. ์‚ฌ์ง„ ์† ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์…€ ๋“ค์ด ์žˆ๊ณ  ์Šคํฌ๋กค์ด ๋˜์–ด ํ™”๋ฉด์—์„œ ๋ณด์ด์ง€ ์•Š๋Š” ์…€๋“ค์ด ์žˆ๋‹ค.
์Šคํฌ๋ฆฐ์— ํ‘œ์‹œ๋˜๊ณ  ์žˆ์ง€ ์•Š๋Š” cell๋“ค์€ queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค.(์‚ฌ์ง„์—์„œ๋Š” Task 2 ์…€์„ ์˜ˆ๋กœ ๋“ค๊ณ ์žˆ๋‹ค.) ์ด๋ ‡๊ฒŒ queue๋กœ ๋“ค์–ด๊ฐ„ cell๋“ค์„ dequeueํ•˜์—ฌ reuse๋˜๋Š” ๊ณผ์ •์ด ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ–ˆ๋˜ cellForRowAt ๋ฉ”์„œ๋“œ์—์„œ dequeueReusableCell(withIdentifier: ) ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ์•Œ๊ณ ๋‚˜๋ฉด ์™œ cell ์žฌ์‚ฌ์šฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์Šคํฌ๋ฆฐ์— ํ‘œ์‹œ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ cell๋“ค์ด queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๊ฑธ ๊ทธ๋Œ€๋กœ dequeueํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ”ํžˆ๋“ค ํ•œ๋ฒˆ์ฏค ๊ฒช๋Š” ์žฌ์‚ฌ์šฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
(์œ„ ์‚ฌ์ง„์—์„œ๋Š” Task 2 cell์ด ์ฒดํฌ๋œ ์ƒํƒœ๋กœ queue์— ๋“ค์–ด๊ฐ”๊ณ , ์ด๋ฅผ dequeueํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ ํ•  ๊ฒฝ์šฐ ์ฒดํฌ๋œ ์ƒํƒœ์˜ cell์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.)

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด prepareForReuse๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

prepareForReuse

์œ„ ์‚ฌ์ง„์— ๋ช…์‹œ๋œ ์ˆœ์„œ๋กœ cell์ด ์žฌ์‚ฌ์šฉ๋˜๋Š”๋ฐ cellForRowAt์ด ํ˜ธ์ถœ ๋˜๊ธฐ ์ „ prepareForReuse๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” prepareForReuse๋‚ด๋ถ€์— cell์ด ์žฌ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐ ์„ค์ •์„ ์ฝ”๋”ฉ ํ•ด์ค€๋‹ค.

override func prepareForReuse() {
    super.prepareForReuse()
    // ...
}

ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ์–ด๋–ค ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•˜๋Š” cell์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

๋งŒ์•ฝ cell์ž์ฒด์— ์ธํ„ฐ๋ž™์…˜์ด ์—†๊ณ  ๊ทธ๋ƒฅ ํ‘œ์‹œ๋˜๋Š” ์šฉ๋„๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ์‹œ์ฒ˜๋Ÿผ cell์„ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ ์ฒดํฌํ‘œ์‹œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ, prepareForReuse์—์„œ label์˜ text์™€ ์ฒดํฌํ‘œ์‹œ์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ค€๋‹ค๋ฉด ์ด๋ฏธ ํ„ฐ์น˜๋˜์–ด ์ฒดํฌํ‘œ์‹œ๊ฐ€ ๋˜์–ด์žˆ์–ด์•ผํ•˜๋Š” cell์€ ์Šคํฌ๋กค๋กœ ์ธํ•ด ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์กŒ๋‹ค๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ ์ฒดํฌํ‘œ์‹œ๊ฐ€ ์‚ฌ๋ผ์ ธ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ถ€๋ถ„์„ ์ฃผ์˜ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. ์–ธ๊ธ‰ํ•œ ์˜ˆ์‹œ์—์„œ๋Š” prepareForReuse ์ดํ›„ ํ˜ธ์ถœ๋˜๋Š” cellForRowAt์—์„œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ์ฒดํฌํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.