๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/๐Ÿ˜ถ ๊ถ๊ธˆ์ฆ

[UIKit]loadView์— view๋Š” ์–ธ์ œ ํ• ๋‹น๋ ๊นŒ?

by MINT09 2024. 1. 27.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ, ๋ฏผํŠธ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ˆ

loadView์— View๋Š” ์–ธ์ œ ํ• ๋‹น๋ ๊นŒ์š”?
์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ง  ์ฝ”๋“œ์—์„œ ์‹คํ—˜ํ•ด ๋ณธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ƒ์œผ๋กœ๋Š”, super.loadView()๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” view๊ฐ€ nil์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— LLDB๋กœ view๋ฅผ loadView() ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ฐ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ค๋ฅธ ์ผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. super.loadView()๊ฐ€ ๋ถˆ๋ฆฌ๊ธฐ ์ „์— po view๋กœ ์ฐ์–ด๋ณด๋‹ˆ, loadView์™€ loadView๋์ด ์ฐํžˆ๋”๋‹ˆ, ๊ฐ’์ด ๋œจ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ฐธ๊ณ ๋กœ ์˜†์— UIViewController์˜ view๋Š” (id) 0x0์œผ๋กœ ํ• ๋‹น๋˜์–ด ์žˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์ธ๊ฐ€? ์™œ view๊ฐ€ ์ฐํžˆ์ง€?

๊ทธ๋ž˜์„œ loadView()๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์ฐ์–ด๋ณด๊ณ  ํ•˜๋‚˜์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ po view๋ฅผ ์ฐ์–ด๋ณด๋‹ˆ, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด view๊ฐ€ ์ถœ๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

If you access this property when its value is nil, the view controller automatically calls the loadView() method and returns the resulting view.

๊ณต์‹๋ฌธ์„œ ๋‚ด์šฉ์„ ๋ณด๋ฉด, view property์— ์ ‘๊ทผํ•  ๋•Œ nil์ด๋ผ๋ฉด loadView๋ฅผ ํ˜ธ์ถœํ•ด View๋ฅผ ์ฑ„์›Œ์ค€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ ์ด๋ฏธ view๊ฐ€ nil์ด์—ˆ๊ธฐ์— 31๋ฒˆ์งธ ์ค„์˜ loadView()๊ฐ€ ํ˜ธ์ถœ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์–ด์„œ po view๋กœ ์ ‘๊ทผํ•  ๋•Œ๋„ view๊ฐ€ nil๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ loadView๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ๋Ÿฌ๋ฉด์„œ view์— ์ƒˆ๋กœ์šด ๊ฐ’๋“ค์„ ํ• ๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ถ€๋ฅผ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด view๋“ค์ด ๋œจ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. nil ๊ฐ’์ด๋ผ loadView๋ฅผ ํ˜ธ์ถœํ•ด์„œ!

view๊ฐ€ ์—†์œผ๋ฉด ์•ฑ์ด ํ„ฐ์ง€๋‹ˆ๊นŒ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ฐธ ์•ˆ์ „ํ•œ ์–ธ์–ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋‹ค์‹œ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.