iOS/🍎 Documentation

Main event loop λž€?

woozzang 2022. 9. 16. 23:55

μ„Έ 쀄 μš”μ•½

  • main thread’s run loop
  • 이 곳에 μ„€μΉ˜λ˜μ–΄ μžˆλŠ” input source λ₯Ό 톡해 μ‚¬μš©μžμ˜ μ €μˆ˜μ€€ μ΄λ²€νŠΈκ°€ λ“€μ–΄μ˜¨λ‹€.
  • 이 κ³³μ—μ„œ application 은 이벀트 νμ—μ„œ λ°›μ•„μ˜¨ 이벀트λ₯Ό μ²˜λ¦¬ν•œλ‹€.

 

run loop λž€?

  • run loop λŠ” 두 가지 μž‘μ—…μ„ ν•˜λŠ” event-processing λ£¨ν”„μž„.
    1. μž‘μ—…μ„ μŠ€μΌ€μ€„λ§ν•œλ‹€.
    2. ν•΄λ‹Ή run loop μ— μ„€μΉ˜λ˜μ–΄ μžˆλŠ” input source λ“€λ‘œλΆ€ν„° λ‚˜μ˜€λŠ” μ΄λ²€νŠΈλ“€μ„ μ‘°μ •ν•œλ‹€.
  • λͺ¨λ“  μ“°λ ˆλ“œλŠ” 각자의 run loop에 μ ‘κ·Όν•  수 μžˆλ‹€.

 

 

main event loop

  • main event loop λŠ” 메인 μ“°λ ˆλ“œλ₯Ό μœ„ν•œ run loop μ΄κ³ , application object 에 μ˜ν•΄ μžλ™μ μœΌλ‘œ λ™μž‘ν•œλ‹€.
    • 이 λ£¨ν”„μ—μ„œ application 은 λ“€μ–΄μ˜€λŠ” μ΄λ²€νŠΈλ“€μ„ μ§€μ†μ μœΌλ‘œ [핸듀링 λ‹΄λ‹Ή 였브젝트]λ“€μ—κ²Œ ν• λ‹Ήν•œλ‹€.
    • ν•Έλ“€λ§μ˜ 결과둜, μ•±μ˜ μƒνƒœλ‚˜ μ™Έν˜•μ΄ λ³€κ²½λœλ‹€.

 

main event loop 의 νŠΉμ§•

  • 이 루프에 μ„€μΉ˜λ˜μ–΄ μžˆλŠ” primary input source μ—μ„œ μ‚¬μš©μžμ˜ λ™μž‘μ— μ˜ν•΄ μƒμ„±λœ 이벀트λ₯Ό OSλ₯Ό 톡해 λ°›λŠ”λ‹€λŠ” 것이닀.
  • 예λ₯Ό λ“€μ–΄ [λ·°λ₯Ό νƒ­ν•˜κΈ°], [ν‚€λ³΄λ“œλ₯Ό μ΄μš©ν•˜μ—¬ ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜κΈ°] 등이 μžˆλ‹€.

 

λˆ„κ°€ main event loop λ₯Ό μ„€μ •ν•˜λŠ”κ°€

  • UIApplicationMain(::::) μ—μ„œ set up ν•œλ‹€. → UIApplicationMain(::::)
  • Application 은 μ €μˆ˜μ€€ μ‚¬μš©μž 이벀트λ₯Ό μ „λ‹¬ν•˜λŠ” μ±…μž„μ„ 가진 κΈ°μ €μ˜ μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈλ“€κ³Ό 연결을 μƒμ„±ν•œλ‹€.

 

Application Object κ°€ 이벀트λ₯Ό λ°›μ•„μ™€μ„œ μ „λ‹¬ν•œλ‹€.

  • μ•±μ˜ UI 일단 화면에 λ‚˜μ˜€κ³  λ‚˜μ„œλΆ€ν„°λŠ” application 은 μ™ΈλΆ€ μ΄λ²€νŠΈμ— μ˜ν•΄ λ™μž‘ν•˜κ²Œλœλ‹€.
  • application 은 메인 μ“°λ ˆλ“œμ˜ λŸ°λ£¨ν”„μ— μ„€μΉ˜λ˜μ–΄μžˆλŠ” input source λ₯Ό 톡해 μ €μˆ˜μ€€ μ‚¬μš©μž 이벀트λ₯Ό λ°›λŠ”λ‹€.
  • application 이 각각의 이벀트λ₯Ό λ”°λ‘œ μ²˜λ¦¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ—, λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ 이 μ €μˆ˜μ€€ μ΄λ²€νŠΈλ“€μ€ FIFO event queue 에 λ“€μ–΄κ°„λ‹€.
  • application object λŠ” 이벀트 νμ—μ„œ κ°€μž₯ μœ„μ˜ 이벀트λ₯Ό κ°€μ Έμ™€μ„œ event object (UIEvent) 둜 λ³€ν™˜ν•œλ‹€.
  • 그리고 처리λ₯Ό μœ„ν•΄ application λ‚΄λΆ€μ˜ λ‹€λ₯Έ object λ“€μ—κ²Œ μ „λ‹¬ν•œλ‹€.(dispatch)
  • 이벀트λ₯Ό μ „λ‹¬ν•˜λŠ” 호좜이 λ°˜ν™˜λ˜λ©΄, application 은 νμ—μ„œ λ‹€μŒ object λ₯Ό 가져와 μ „λ‹¬ν•œλ‹€.
  • 이 λ™μž‘μ€ 앱이 μ’…λ£Œλ λ•Œ κΉŒμ§€ κ³„μ†λœλ‹€.

 


μ˜€λŠ˜λ„ λ‚˜λŠ” μ„±μž₯ν–ˆλ‹€!!πŸ”₯

 

πŸ€– [Back to the Basics] πŸ’»
μ£Όλ‹ˆμ–΄ iOS 개발자 우짱의 기술 λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.

 

[μ°Έκ³  자료 πŸ™‡πŸ»‍♂️]

Main event loop

Apple Developer Documentation