iOS App Life Cycle & ViewController Life Cycle
iOS ๐Ÿ”ฅ

iOS App Life Cycle & ViewController Life Cycle

App Life Cycle

์˜ˆ์ „๋ถ€ํ„ฐ ํฌ์ŠคํŒ… ํ•˜๋ คํ–ˆ๋˜ App Life Cycle ์ž…๋‹ˆ๋‹ค. ViewController Life Cycle๋„ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„  App์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Not Running, Foreground, Background ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Foreground๋Š” ๋‹ค์‹œ InActive, Active
Background๋Š” Suspend, Running ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Foreground์™€ Background์˜ ๊ณตํ†ต์ ์€ ์•ฑ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋‹ค ์ž…๋‹ˆ๋‹ค.
Foreground = ์•ฑ์ด ํ™”๋ฉด์„ ์ ์œ  ์ค‘์ธ ๊ฒƒ์ด๊ณ , ๊ทธ ์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ Full Control์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด InActive ์ƒํƒœ์ž„.

์ฆ‰ ์œ ํŠœ๋ธŒ๋ฅผ ๋ณด๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ „ํ™”๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ ์œ ํŠœ๋ธŒ๋Š” Active -> InActive -> Background ์ด๋Ÿฐ์‹์œผ๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค.
๋ฌด์กฐ๊ฑด InActive๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค! ์•„์ฃผ ์ž ๊น๋™์•ˆ์ด์š”. ๋Œ์•„์˜ฌ ๋•Œ๋„ Background -> InActive -> Active ์ด๋Ÿฐ์‹์ž…๋‹ˆ๋‹ค.

Backgorund = ํ™”๋ฉด์—์„œ๋Š” ๋‚ด๋ ค๊ฐ”์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์žˆ๋Š” ์ƒํƒœ ์ž…๋‹ˆ๋‹ค.

  • Suspend (๊ฐ€๋งŒํžˆ ๊ธฐ๋‹ค๋ฆผ)
  • Running (๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋Ÿฌ๋‹ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฉ”์ผ ์ „์†ก, ์—…๋กœ๋“œ, ํƒ€์ด๋จธ ๋“ฑ)

๊ทธ๋ฆฌ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด iOS์— ์˜ํ•ด Not Running์œผ๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ViewController Life Cycle

ViewController๋ฅผ ๋งŒ๋“ค๋ฉด viewDidLoad์ด๋Ÿฐ ํ•จ์ˆ˜๋“ค์„ overrideํ•จ์„ ๋ณผ ์ˆ˜ ์žˆ์ฃ ?

์ด๋Š” A sequence of message is sent to vc as it progresses through its lifetime ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ViewController๋Š” Life Cycle์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

viewdidload

view๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ outlet์ด set๋˜์–ด ์žˆ์ง€๋งŒ ์•„์ง view์˜ bounds๋Š” ์•„์ง set๋˜์ง€ ์•Š์œผ๋‹ˆ ์—ฌ๊ธฐ์„œ setํ•˜๋Š”๊ฒƒ์€ ์ฃผ์˜ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ ์ž‘์—…์€ ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

viewWillAppear

๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ modal์„ ํƒ€๊ณ  ๊ฐ€๊ณ  ๋‹ค์‹œ ๋Œ์•„์˜ฌ ๋•Œ ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

viewDidAppear

์—ญ์‹œ ๋ฐ˜๋ณต์  ํ˜ธ์ถœ๋˜๋ฉฐ, viewWillAppear ํ›„์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜, ํƒ€์ด๋จธ, ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ด€์ฐฐํ•˜๊ธฐ์—(GPS position) ์•„์ฃผ ์ข‹์€ ๊ณณ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” User Interaction ๋ฅผ blockํ•˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์–ธ๊ฐ€ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…(network fetch)๋ฅผ ํ•˜๊ธฐ์—๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

viewWillDisappear

๋ณดํ†ต, viewDidAppear์—์„œ ์„ค์ •ํ•œ๊ฑธ undoํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด stop timer ๋“ฑ์ด ์žˆ๊ฒ ๋„ค์š”.

viewDidDisappear

clean up MVC

๊ทธ ์™ธ์—

Geometry(๋ทฐ์˜ ๊ฐ€๋กœ์„ธ๋กœ ๋ณ€๊ฒฝ)

viewWillLayoutSubviews(), viewDidLayoutSubviews()๋“ฑ์˜ ํ•จ์ˆ˜๋Š” top-level view์˜ bound๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ด ๋ฉ”์„ธ์ง€(ํ•จ์ˆ˜)๊ฐ€ ํ˜ธ์ถœ๋จ. Autolayout์„ ์„ค์ •ํ•˜๋ฉด, ์ด๊ฑธ ํ˜ธ์ถœํ•  ์ผ์ด ๋”ฑํžˆ ์—†์Šต๋‹ˆ๋‹ค.
์ข…์ข… ํ˜ธ์ถœ๋จ. ์ด๊ฒŒ ํ•ญ์ƒ view์˜ bound๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š”๊ฑธ ์˜๋ฏธํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ฏ€๋กœ Don't do anything here that can't be properly done repeatedly. ๋ผ๊ณ  ํ•˜๋„ค์š”

Low Memory

didRecieveMemoryWarning() ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

awakeFromNib

Waking up from an storyboard ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ viewWillTransition ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์—๋Š” App Life Cycle๊ณผ ์—ฐ๊ด€์ด ์žˆ๋Š” AppDelegate, SceneDelegate์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.