๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SeSAC

[iOS] TIL_230809

by lizzydev 2023. 8. 10.

json ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์‹œ ์ฃผ์˜์‚ฌํ•ญ

json์˜ ๊ฐ€์žฅ ๋ฐ”๊นฅ์ด ๋ฐฐ์—ด์ž„

์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ

Video ๊ฒ€์ƒ‰ ํ™”๋ฉด ๊ตฌํ˜„ํ•˜๊ธฐ

๋ ˆ์ด์•„์›ƒ ์„ค์ •์‹œ ๋ถ€๋“ฑํ˜ธ ์‚ฌ์šฉํ•˜๊ธฐ

์ œ๋ชฉ์ด ๊ธธ์–ด์ง€๋ฉด ๋‘๋ฒˆ์งธ ๋ผ๋ฒจ์ด ๊ฐ€๋ ค์งˆ ์ˆ˜ ์žˆ์Œ

๋‘๋ฒˆ์งธ ๋ผ๋ฒจ bottom ๋งˆ์ง„ 8๋กœ ์คŒ → ์•„์˜ˆ ๋‚ด๋ ค๊ฐ€๋ฒ„๋ฆผ

8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ฒŒ๋กœ ๋ณ€๊ฒฝ.

๋ ˆ์ด์•„์›ƒ ๋ฌธ์ œ ์—†์ด ์ž˜ ์„ค์ • ๋จ

๋™์˜์ƒ ๊ฒ€์ƒ‰ ๋ทฐ(Kakao API)

  1. video ๋‹ด์„ ๊ตฌ์กฐ์ฒด ์„ ์–ธ

  1. ๋„คํŠธ์›Œํฌํ†ต์‹ ํ•ด์„œ ์–ป์€ video ๋‹ด์•„ ๋†“์„ struct ๋ฐฐ์—ด ์„ ์–ธ

  1. json์œผ๋กœ ์–ป์€ ๊ฐ’๋“ค๋กœ Struct ์ดˆ๊ธฐํ™” ํ•ด์„œ Struct ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ €์žฅ

์ƒํƒœ์ฝ”๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

request์— ๋ฌธ์ œ ์žˆ์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ๋œธ.

validate์— ๋ฒ”์œ„๋ฅผ ๋„ฃ์–ด์ฃผ์–ด ํ•ด๋‹น ๋ฒ”์œ„ ๋ฉ”์„ธ์ง€ response๋กœ ๋ฐ›์œผ๋ฉด ์˜ค๋ฅ˜์—ฌ๋„ success๋กœ ๋“ค์–ด์˜ค๊ณ  ์นด์นด์˜ค๊ฐ€ ๋ณด๋‚ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์•Œ์ˆ˜์žˆ์Œ

reponse ์ƒํƒœ ์ฝ”๋“œ ๋ณด๋Š” ๋ฒ•

status code์— ๋”ฐ๋ผ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜๊ธฐ

์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋กœ description ๋งŒ๋“ค๊ธฐ

์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ €์žฅํ•ด ๋‘” videoList ๋น„์›Œ์ค˜์•ผ ํ•จ

ํŽ˜์ด์ง€๋„ค์ด์…˜

size:ํ•œ ํŽ˜์ด์ง€์—์„œ ๋ฐ›์•„์˜ฌ ๊ฐœ์ˆ˜

page: ๋ช‡๋ฒˆ์งธ ํŽ˜์ด์ง€

page ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์š”์ฒญํ•˜๊ธฐ

์Šคํฌ๋กค ๋‚ด๋ฆฌ๋ฉด์„œ ๋ฏธ๋ฆฌ ์„œ๋ฒ„ ์š”์ฒญํ•˜๊ธฐ

:์Šคํฌ๋กค ๋‚ด๋ฆด๋•Œ ์„œ๋ฅธ ๊ฐœ์ค‘์— ๋‘๊ฐœ ์ •๋„ ๋‚จ์•˜์„ ๋•Œ ์ •๋„ ์„œ๋ฒ„ ์š”์ฒญ

UITableViewDataSourcePrefetching

iOS10์ด์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํ† ์ฝœ, cellForRowAt ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ ๋จ.

cellForRowAt → ์…€์ด ๋ˆˆ์— ๋ณด์ผ ๋•Œ ์‹คํ–‰ ๋จ(๋ณ„์‚ฌ์ง„๊ฐ™์ด ์šฉ๋Ÿ‰ํฐ ์‚ฌ์ง„ ๊ทธ ๋•Œ ํ˜ธ์ถœ ํ•˜๋ฉด ๋Šฆ์Œ.)

prefetch → ํ˜ธ์ถœ ์ „์—๋ฏธ๋ฆฌ ๋‹ค์šด๋กœ๋“œ

์…€์ด ํ™”๋ฉด์— ๋ณด์ด๊ธฐ ์ง์ „์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋‹ค์šด ๋ฐ›๋Š” ์ฝ”๋“œ

videoList๋ž‘ indexPath.row ์œ„์น˜๋ฅผ ๋น„๊ตํ•ด ๋งˆ์ง€๋ง‰ ์Šคํฌ๋กค ์‹œ์ ์„ ํ™•์ธ → ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‹œ๋„

bookmark

์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰์–ด์ผ๋•Œ ํŽ˜์ด์ง€ ์ดˆ๊ธฐํ™”

kakao๋Š” ํŽ˜์ด์ง€ 15๊นŒ์ง€๋งŒ ์ œ๊ณต

Q: page ๋งˆ์ง€๋ง‰์ธ์ง€๋ž‘ isEnd ๋‘˜๋‹ค ์ฒดํฌํ•ด์ค˜์•ผ ํ•˜๋Š” ์ด์œ 

→ api๋งˆ๋‹ค ๋‹ฌ๋ผ์„œ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•จ. ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€์—ฌ๋„ isEnd๋Š” true๊ฐ€ ์•„๋‹Œ false๋กœ ์ค„ ์ˆ˜๋„ ์žˆ์Œ

ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋ฐฉ์‹

offSetBased: ์„œ๋ฒ„์— ์ค‘๋ณต๋ฐ์ดํ„ฐ๊ฐ€ ์ ์„๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ.

๋ช‡๋ฒˆ์งธ ํŽ˜์ด์ง€์— ๋ช‡๋ฒˆ์งธ ๋ฐ์ดํ„ฐ

cursor:์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณณ์œผ๋กœ ์ปค์„œ ์˜ฎ๊ฒจ์„œ ๋ณด์—ฌ์คŒ. ๋ˆ„๋ฝ๊ฐ€๋Šฅ์„ฑ์žˆ์Œ

ios์—์„œ ํ…Œ์ด๋ทฐ ์…€ ๋ฐ์ดํ„ฐ ๋ฏธ๋ฆฌ ์ค€๋น„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. prefetching
  2. tableview willDisplayCell
    1. ์…€์ด ํ‘œ์‹œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ. ์˜ˆ์ „์— ๋งŽ์ด ์”€.
    2. ์…€์ด ์•ˆ๋ณด์ด๋Š”๋ฐ ํ˜ธ์ถœ, ํ•„์š”์—†๋Š” ์š”์ฒญ๋“ค์ด ๋“ค์–ด๊ฐ. ๋งˆ์ง€๋ง‰ ์Šคํฌ๋กค ์‹œ์  ์žก๊ธฐ๊ฐ€ 1๋ฒˆ๋ณด๋‹ค ์–ด๋ ค์›€. → prefetching ์“ฐ๋Š”๊ฒŒ ๋‚˜์Œ.
  3. ScrollView offset
  • scrollview content size height = ๊ธธ๋‹ค๋ž€ ์ด ์ „์ฒด ์Šคํฌ๋กค๋ทฐ ํฌ๊ธฐ
  • scrolllview.contentoffset.y : ์Šคํฌ๋กค๋ทฐ์—์„œ ๋ˆˆ์— ๋ณด์—ฌ์ง€๋Š” ๊ธฐ๊ธฐ์˜ ๊ฐ€์žฅ ๋ฐ‘๋ถ€๋ถ„ ์œ„์น˜ ์˜๋ฏธ
  • ์ด ๋‘๊ฐ’์ด ๊ฐ™์•„์ง€๋ฉด ๋”์ด์ƒ ์Šคํฌ๋กคํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์ด๋ผ๊ณ  ๊ฐ์ง€ .

์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Kingfisher ์ด์šฉํ•ด์„œ ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

'SeSAC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] TIL_20230811  (0) 2023.08.15
[iOS] TIL_230810  (0) 2023.08.14
[iOS] TIL_230808  (0) 2023.08.09
[iOS] TIL_230807  (0) 2023.08.09
[iOS] TIL_230804  (0) 2023.08.06