TableView dataSource์—์„œ ์•„์ดํ…œ์„ ๊ฐ€์ ธ์˜ค๋‹ค outOfIndex๊ฐ€ ๋‚˜์„œ crash๊ฐ€ ๋‚ฌ๋‹ค. ์ด๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šด ์ ์— ๋Œ€ํ•ด ์ ์–ด๋ณธ๋‹ค.

์–ด๋–ค ์ƒํ™ฉ์ธ๊ฐ€?

  • crash ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, tableView์—์„œ indexPath๋ฅผ ๋ฒ—์–ด๋‚˜ ๋ฐœ์ƒํ–ˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.
  • ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ๋ณด์•˜์„ ๋•Œ๋Š” ๋ณ„ ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์˜€๋‹ค.

์ฝ”๋“œ์˜ ์ƒํ™ฉ

  • Api ํ˜ธ์ถœ ์‹œ ๋“ค์–ด๊ฐ€๋Š” completion์—์„œ performInMainThread๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.
  • completion์—์„œ main์œผ๋กœ ํ•ด์คฌ๋‹ค๋ฉด, ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—†์–ด์งˆ ๋“ฏํ–ˆ๋‹ค.
  • Completion in main thread
  • ํ•ด๋‹น ์ฝ”๋“œ๋‚ด์—์„œ๋Š” tableView๋ฅผ reload ํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.
  • ์ด๋Ÿฌ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋ฌธ์ œ์ 

  • async๋กœ 10๊ฐœ์˜ reload๊ฐ€ asyncํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.
  • main thread๋Š” serialํ•˜๋ฏ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ tableView reload๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ, ๊ทธ ์™€์ค‘์— ๋งŒ์•ฝ dataSource์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด?
  • ํ˜„์žฌ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… ์ดํ›„์— ์ฒ˜๋ฆฌ๋  ์ž‘์—…์—์„œ tableView๋ฅผ reloadํ•œ๋‹ค๋ฉด outOfIndex๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋ฐฉ์–ด์ฝ”๋“œ

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋•Œ๋ฌธ์—, array์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ, ๋ฐฉ์–ด์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•œ๋‹ค.
  • ์ด์ „์— ์•Œ์•„๋ณด์•˜๋˜ subscript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Safe Array Lookup

์ •๋ฆฌ

  • ํฌ๋ž˜์‹œ๊ฐ€ ๋‚˜๊ธฐ ์‰ฌ์šด ์ƒํ™ฉ์€ ์˜ˆ์ „์— ์ •๋ฆฌํ–ˆ์—ˆ๋‹ค.
  • ์ด๋ฒˆ์— ์‹ค์งˆ์ ์ธ ์ƒํ™ฉ์„ ๋งˆ์ฃผํ•˜์—ฌ ๋ณด๋‹ค ์กฐ์‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

Reference