UIKit ํด๋์ค๋ค์ ๋ค๋ฃฐ ๋ ๊ผญ ์ฒ๋ฆฌํด์ผํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๋ ๋ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ
UI ์ฒ๋ฆฌ๋ Main Thread์์ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ ธ์ผํ๋ค.
main queue
- ๋ฉ์ธ ์ค๋ ๋(UI ์ค๋ ๋)์์ ์ฌ์ฉ ๋๋ Serial Queue
- ๋ชจ๋ UI ์ฒ๋ฆฌ๋ ๋ฉ์ธ ์ค๋ ๋์์ ์ฒ๋ฆฌํด์ผ ํจ
UI์ ๋ฐ์ดํธ๊ฐ Background Thread์์ ์ด๋ฃจ์ด์ง๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ด๊ฒ Main Thread์ Blockํ์์ ๋ง๊ธฐ ์ํด์๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ ๋ ์ ์์ง๋ง UI๋ Main Thread์์ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ ธ์ผํ๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
UIKit์ ๋๋ถ๋ถ์ ์์๋ค์ Thread-Safeํ์ง ์๋ค(nonatomic). Apple์ด UIKit์ ์ด๋ ๊ฒ ๋ง๋ ์ด์ ๋ ๊ฐ์ฅ ๋จ์ํ๊ณ ํฐ ์ด์ ๋ก UIKit๊ณผ ๊ฐ์ด ๋งค์ฐ ํฐ ํ๋ ์์ํฌ์ ๋ชจ๋ ์์๋ค์ด Thread-Safeํ๊ฒ ๋์ํ๋๋ก ๋ง๋๋๊ฒ์ ๋งค์ฐ ๋ณต์กํ๊ณ ์ฑ๋ฅ๋ฉด์์ ํจ์จ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. UI๋ ์ฌ์ฉ์์๊ฒ ์ง์ ์ ์ผ๋ก ๋ณด์ฌ์ง๋ ๋ถ๋ถ์ด๋ฏ๋ก ์ฑ๋ฅ๊ณผ ํจ์จ, ์์ ์ฑ์ ๋งค์ฐ ์ค์ํ๋ค.
Serial๋ก ๊ตฌํํ๋ฉด ์์๊ฐ์ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก. UI๋ Main Thread์์ synchronouslyํ๊ฒ ๋์ํ๊ฒ ๋๋ค.
์๊ธฐ์์๋ ๊ณต๋ถํ๋ฏ, ํ๋ฉดํ์(์ค์ ๋ก ๋ทฐ ์์ ์ปจํ ์ธ ๋ ์ ๋๋ฉ์ด์ ์ ๊ทธ๋ฆฌ๋ ํ์)๋ UIKit์์ ์ด ์ง์ ํํ์ง ์๊ณ UIKit์ ์ํด Core Animation์๊ฒ ์์ํ๊ฒ ๋๋ค.
์ด ๋, Core Animation์์๋ Core Animation Pipeline์ ์ฌ์ฉํ์ฌ rendering์ ํ๋๋ฐ
Core Animation Pipeline์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ด 4๋จ๊ณ๋ก(Commit Transaction -> Render Server -> GPU -> Display)๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
๋์ถฉ ์ด๋ฐ์์ธ๋ฐ..์์ธํ๊ฑด Why the UI need to be updated on Main Thread์ ์ฐธ๊ณ ํ์..
๋ฌดํผ ์ด๋ฌํ ์ ๊ณผ์ ์ด ์ฌ์ฉ์๊ฐ ๋ณด๋๋ฐ์ ๋ถํธํจ์ด ์์ผ๋ ค๋ฉด ํ 60hz ์ฃผ์ฌ์จ ๊ธฐ์ค์ผ๋ก 1/60์ด์ ์ด๋ฃจ์ด์ ธ์ผํ๋ฉฐ, ๊ณผ์ ์ค์ application์ด ์ถฉ๋์ด ๋๋ฉด ์๋๋ค.
์ด๋ฅผ Main Thread์์ ๋จ์ผํํ์ฌ ์ฒ๋ฆฌํ์ง ์๊ณ ์ฌ๋ฌ Thread์์ ๊ฐ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๊ฒ ๋๋ค๋ฉด, ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ธ์ฝ๋ฉํ์ฌ ๋ ๋ ์๋ฒ๋ก ์ ์กํ ๊ฒ์ด๊ณ , ์ด์ ๋ฐ๋ผ GPU ์ ๋ง์ ๋ ๋๋ง ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค. ๋ ๋๋ง์ ์์คํ ๋ฆฌ์์ค๊ฐ ๋ง์ด ๋๋ ์์ ์ด๋ฏ๋ก GPU ๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ(Main Thread๊ฐ ์๋) BackGround Thread์์ ๊ฐ์์ Run-Loop๋ก ์ ๋ฐ์ดํธ๋ฅผ ํ๊ฒ ๋๋ค๋ฉด, View๊ฐ ์ ๋ฉ๋๋ก ๋์ํ ์ ์๋ค. (์๋ฅผ ๋ค์ด, ๊ธฐ๊ธฐ๋ฅผ ํ์ ํ์๋, ๋์์ View์ Layout์ด ์ฌ๋ฐฐ์น๋์ง ์๊ณ ๊ฐ๊ฐ ๋ฐ๋ก๋ฐ๋ก ๋์ํ๋ ๋ฑ)
์ด์ ๋ฐํด, Main Thread์์๋ ๋ทฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์์ ์์ ์ Run Loop์ ๋์์ ํ๋ฒ์ ๋ฐ์ํ๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฑ์ด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฒ๋ฆฌ ํ ์ ์์ผ๋ฉฐ, ๊ทธ๊ฒ๋ค์ด ๋์์ ํ์ฑํ ๋ ์ ์๋ค. ์ด๋ฅผ Main Thread์ View Drawing Cycle์ด๋ผ๊ณ ํ๋ค.