[TIL] 2024. 09. 23

2024. 9. 24. 23:17ยทTIL (Today I Learned)
๐Ÿ”ฅ ํ‚ค์›Œ๋“œ
     - Autolayout
     - UIViewController LifeCycle
     - UINavigatationController
     - ํ™”๋ฉด ์ „ํ™˜
     - UIKit

 

๐Ÿ”ฅ ์˜ˆ์ƒ ์งˆ๋ฌธ์ง€

  1. clipToBounds์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • clipToBounds๋Š” UIView์˜ ์†์„ฑ์œผ๋กœ, ๋ทฐ์˜ ๊ฒฝ๊ณ„(bounds)๋ฅผ ๋ฒ—์–ด๋‚œ ํ•˜์œ„ ๋ทฐ๊ฐ€ ์ž˜๋ฆฌ๋„๋ก ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ false์ด๋ฉฐ, false๋กœ ์„ค์ •ํ•˜๋ฉด ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๋ถ€๋ถ„๋„ ํ™”๋ฉด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ true๋กœ ์„ค์ •ํ•˜๋ฉด ๋ทฐ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์ž˜๋ ค์„œ ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  2. UIKit ํด๋ž˜์Šค๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • UIKit ํด๋ž˜์Šค๋“ค์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(Main Thread)์—์„œ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  UI ์—…๋ฐ์ดํŠธ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ UI ์ž‘์—…์„ ํ•˜๋ฉด ์•ฑ์ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ํ•˜๊ฑฐ๋‚˜ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. UIViewController์˜ LifeCycle์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • UIViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
      • init: ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ดˆ๊ธฐํ™” ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • loadView: ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • viewDidLoad: ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์„ค์ •์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
      • viewWillAppear: ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ›„์— ๊ณ„์ธต ๊ตฌ์กฐ์— ์ถ”๊ฐ€.
      • viewIsAppearing: ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • viewWillLayoutSubviews: ๋ทฐ๊ฐ€ ํ˜„์žฌ ์žฅ์น˜์˜ ๋ฐฉํ–ฅ์ด๋‚˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • viewDidLayoutSubViews:๋ทฐ๊ฐ€ ๋ ˆ์ด์•„์›ƒ ์—…๋ฐ์ดํŠธ๋ฅผ ๋งˆ์นœ ํ›„์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • viewDidAppear: ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • viewWillDisappear: ๋ทฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • viewDidDisappear: ๋ทฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง„ ํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • deinit: ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  4. viewDidLoad๋Š” ๋‹ค๋ฅธํ™”๋ฉด์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์™”์„ ๋•Œ ํ˜ธ์ถœ์ด ๋˜๋‚˜์š”?
    • ์•„๋‹ˆ์š”, viewDidLoad๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ฒ˜์Œ ๋กœ๋“œ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค๊ฐ€ ๋Œ์•„์˜ฌ ๋•Œ ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด viewDidLoad๋Š” ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  viewWillAppear๋‚˜ viewDidAppear๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  5. UITableView๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์…จ๋‚˜์š”?
    • ๋„ค, ์‚ฌ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. UITableView๋Š” ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ทฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. UITableView๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ dataSource๋ฅผ ์‚ฌ์šฉํ•˜์…จ์„ํ…๋ฐ ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ๋˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • UITableViewDataSource ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:
      • tableView(_:numberOfRowsInSection:): ๊ฐ ์„น์…˜์— ๋ช‡ ๊ฐœ์˜ ํ–‰(row)์ด ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • tableView(_:cellForRowAt:): ๊ฐ ํ–‰์— ํ‘œ์‹œ๋  ์…€์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์…€์˜ ๋‚ด์šฉ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  7. ํ™”๋ฉด์ „ํ™˜ push์™€ present ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • Push: UINavigationController์˜ ์Šคํƒ์— ์ƒˆ๋กœ์šด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™”๋ฉด์„ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ, ํ™”๋ฉด์ด ๊ณ„์ธต์ ์œผ๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • Present: ํ˜„์žฌ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์œ„์— ์ƒˆ๋กœ์šด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ชจ๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๊ณ„์ธต์ ์ด์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. dismiss๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ํ‘œ์‹œ๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. UINavigationController๊ฐ€ ์•„๋‹Œ UIViewController์—์„œ push๋ฅผ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
    • UINavigationController๊ฐ€ ์•„๋‹Œ UIViewController์—์„œ push๋ฅผ ์‹œ๋„ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. pushViewController(_:animated:) ๋ฉ”์„œ๋“œ๋Š” UINavigationController์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  9. UINavigationController๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ViewController๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. push์™€ pop์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋„์šฐ๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ViewController๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ํŽธํ• ๊นŒ์š”?
    • ์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์€ LIFO(Last In, First Out) ๊ตฌ์กฐ๋กœ, push๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์„ ์ถ”๊ฐ€ํ•˜๊ณ , pop์„ ํ†ตํ•ด ๋งˆ์ง€๋ง‰ ํ™”๋ฉด์„ ์ œ๊ฑฐํ•˜๋Š” UINavigationController์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  10. Autolayout์—์„œ Leading Constraint ์™€ Left Constraint์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • Left Constraint: ์ขŒ์ธก ๊ฒฝ๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ œ์•ฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฐฉํ–ฅ์„ฑ์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์ขŒ์ธก์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • Leading Constraint: ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฝ๊ธฐ ๋ฐฉํ–ฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์ œ์•ฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. LTR(Left-to-Right) ์–ธ์–ด์—์„œ๋Š” ์ขŒ์ธก, RTL(Right-to-Left) ์–ธ์–ด์—์„œ๋Š” ์šฐ์ธก์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ตญ์ œํ™”๋ฅผ ๊ณ ๋ คํ•  ๋•Œ๋Š” Leading Constraint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.
  11. Safe Area์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • Safe Area๋Š” iOS 11 ์ดํ›„ ๋„์ž…๋œ ๊ฐœ๋…์œผ๋กœ, ๋””๋ฐ”์ด์Šค์˜ ๋…ธ์น˜, ์ƒํƒœ ๋ฐ”, ํ™ˆ ์ธ๋””์ผ€์ดํ„ฐ, ๋˜๋Š” ๊ธฐํƒ€ UI ์š”์†Œ์— ์˜ํ•ด ๊ฐ€๋ ค์ง€์ง€ ์•Š๋Š” ์˜์—ญ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ๋•Œ Safe Area๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ UI๊ฐ€ ์ž˜ ๋ณด์ด๋„๋ก ๋ ˆ์ด์•„์›ƒ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Safe Area๋Š” safeAreaLayoutGuide๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

UIViewController์˜ LifeCycle (์ถœ์ฒ˜: Apple Developer)

 

์ฐธ๊ณ ํ• ๋งŒํ•œ ๊ธ€

 

  • UIViewController LifeCycle

https://medium.com/@knoo/viewcontroller-life-cycle-in-ios-29f7da4acfc7

 

ViewController Life Cycle in iOS

Hello everyone! I’m excited to share my knowledge about the ViewController Life Cycle and how it is organized in Swift. For a deeper dive…

medium.com

๋ฐ˜์‘ํ˜•

'TIL (Today I Learned)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] 2024. 09. 25  (0) 2024.09.25
[TIL] 2024. 09. 24  (0) 2024.09.24
[TIL] 2024. 09. 20  (0) 2024.09.24
[TIL] 2024. 09. 19  (0) 2024.09.24
[TIL] 2024. 09. 18  (0) 2024.09.24
'TIL (Today I Learned)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL] 2024. 09. 25
  • [TIL] 2024. 09. 24
  • [TIL] 2024. 09. 20
  • [TIL] 2024. 09. 19
DongDong_
DongDong_
  • DongDong_
    how-dev
    DongDong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (102)
      • TIL (Today I Learned) (96)
      • DEV (0)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
        • SWIFT (0)
      • ์‚ฌ์ „์บ ํ”„ ๋ฐ์ผ๋ฆฌ ๋ฏธ์…˜ (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์ž‘์„ฑ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
DongDong_
[TIL] 2024. 09. 23
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”