UIKit
Last updated
Last updated
๐๐ปโโ๏ธ 1-1 : frame๊ณผ bounds์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
ํ๋ ์๊ณผ ๋ฐ์ด์ค ๋ชจ๋ view์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
frame์ super view๋ฅผ ๊ธฐ์ค์ผ๋ก view์ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ฝ,
frame.origin = CGPoint(x:10, y:10)
์ด๋ผ๋ฉด super view์ (0,0) ๊ธฐ์ค์ผ๋ก (10,10)์ด๋ํ ๊ณณ์ ์ผ์ชฝ ์ ๋ชจ์๋ฆฌ ๊ฐ์ ์ฐ๊ฒ ๋ฉ๋๋ค.bounds๋ ์๊ธฐ ์์ ์ ๊ธฐ์ค์ผ๋ก view์ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ๊ทธ๋์ ์ฒ์์ (0,0)์ผ๋ก ์ด๊ธฐํ ๋ฉ๋๋ค. bounds์ ์์น๋ ํ์๋ทฐ์ ์์ ์ ์ด๋ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
frame์ view ์์ญ์ ๋ชจ๋ ๊ฐ์ธ๋ ์ฌ๊ฐํ์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ฝ view๊ฐ ํ์ ํ์ฌ ๋ชจ์๋ฆฌ์ ์์น๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ์๋ frame.size๋ ํจ๊ป ๋ณํํฉ๋๋ค.
bounds๋ view ์์ฒด์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ๊ทธ๋์ view๊ฐ ํ์ ์ ํ๋๋ผ๋ bounds.size์ ํฌ๊ธฐ๋ ๋ณํ์ง ์์ต๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ ํ์๋ทฐ์ ์์ ์ ์ด๋ํ๋ค๋๊ฒ ๋ฌด์จ ๋ง์ด์ฃ ? 1. bounds์ ๊ฐ์ด (10,10)์ผ๋ก ์ฎ๊ฒจ์ง๋๋ผ๋ view๋ ์ด๋ํ์ง ์์ต๋๋ค. 2. A๋ทฐ์
bounds.origin = CGPoint(x:10,y:10)
์ผ๋ก ์ฃผ๊ณ , B๋ทฐ์ super view๋ฅผ A๋ก ์ค์ ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. 3. bounds์ ์์น๋ ํ์๋ทฐ์ ์์ ์ ์ด๋์ํจ๋ค๊ณ ํ์ผ๋ฏ๋ก A์ (10,10)์์น์ ์๋ B๋ฅผ A์ ์์์ ์์น๋ก ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. 4. ์ฆ, ํ์๋ทฐ๋ super view์ (10,10)์์น๋ฅผ ์์์ ์ผ๋ก ์๊ฐํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
๐๐ปโโ๏ธ 1-2 : frame๊ณผ bounds์ ๊ฐ๊ฐ ์ธ์ ์ฌ์ฉํ๋์?
frame์ view์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
frame์ super view๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๋ฅผ ์ ํ๊ณ , view ์ ์ฒด ์์ญ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ฏ๋ก ์๊ฐ์ ์ผ๋ก ์ค๊ณํ๊ธฐ ์ฝ์ต๋๋ค.
bounds๋ view๋ฅผ ํ์ ํ์ง๋ง ์ค์ ํฌ๊ธฐ๋ฅผ ์๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋, bounds๋ ์์ ์ ์ด๋ํ๋ฏ๋ก scrollView์์ ์คํฌ๋กค ํ ๋ ์ฌ์ฉํฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ ์คํฌ๋กค๋ทฐ์์ bounds์ ๋ํด์ ์์ธํ ์ค๋ช ํด ์ฃผ์ธ์
scrollView์ ํ์๋ทฐ๋ค์ ๋ฃ์ด์ฃผ๋ฉด ํ๋ฉด์ ๋์ด๊ฐ๋ UI๋ฅผ ์คํฌ๋กค์ ํตํด ๋ณผ ์ ์์ต๋๋ค.
์ด๋, ํ์๋ทฐ๋ค์ด ์์น๋ฅผ ์ด๋ํ๋ ๊ฒ์ด ์๋๋ผ, scrollView๊ฐ ํ์๋ทฐ์ ์์ ์ ์ด๋์ํค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ๋ค์ด, ์๋์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ์ถ์ ๋๋ scrollView์ bound.origin.y๊ฐ์ ์์ ํ์ฌ superView๊ฐ ์ด๋ํ๋ ๊ฒ์ ๋๋ค.
autolayout์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ด๋ถ์์ frame์ผ๋ก ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์ autolayout โ frame์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
๊ทธ๋์ ๊ณ์ฐ ์๋๋ frame์ด ๋ ๋น ๋ฅผ ์ ๋ฐ์ ์์ต๋๋ค. UI ์๋(์ฑ๋ฅ)์ ๋ฏผ๊ฐํ ์๋น์ค์ ๋ํด์๋ frame์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จ, frame์ origin x,y๊ฐ์ ๊ทธ๋ฅ ์ฃผ๋ ๊ฒ ๋ณด๋ค๋ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋์ํ๊ธฐ ์ํด ํ๋ฉด์ ํฌ๊ธฐ๋ฅผ ๋ถ๋ฌ์์ ๋น์จ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์งํฅํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ฉด์์ ๊ฐ๋ฐ ์๋๋ view์ ๋ฐฐ์น๊ฐ ์๋์ ์ผ๋ก ๊ฐ๋จํ autolayout์ด ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค.
Float๋ ์ค์ํ์ ์ ๋ํ๋ด๋ฉฐ 32๋นํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
CGFloat๋ CPU ์ํคํ ์ฒ์ ๋ฐ๋ผ ์๋์ ์ผ๋ก 32๋นํธ๊ฐ ๋ ์๋, 64๋นํธ๊ฐ ๋ ์๋ ์์ต๋๋ค.
๋ฉํฐ ํ๋ซํผ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ CGFloat๋ฅผ ์ฌ์ฉํ๋ฉด, ์ค์ํ์ ์ ๋ํด ์ฝ๋ ์์ ์ ํ ํ์๊ฐ ์์ต๋๋ค.
๐๐ปโโ๏ธ 4-1 : ๋ชจ๋ View Controller ๊ฐ์ฒด์ ์์ ํด๋์ค๋ ๋ฌด์์ธ๊ฐ์?
๋ชจ๋ ViewController์ ์์ํด๋์ค๋ UIViewController์ ๋๋ค.
UIViewController๋ UIKit์์ ๋ทฐ์ ๊ณ์ธต์ ๊ด๋ฆฌํด์ฃผ๋ ๊ฐ์ฒด ์ ๋๋ค.
๋ฐ์ดํฐ๊ฐ ๋ณํํจ์ ๋ฐ๋ผ ๋ทฐ ์ปจํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ณ , ๋ทฐ์ ํฌ๊ธฐ์ ๋ ์ด์์์ ๊ด๋ฆฌํฉ๋๋ค.
UIViewController๋ UIResponder์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์๋ ์์ต๋๋ค.
๐๐ปโโ๏ธ 4-2: UIResponder๊ฐ ๋ฌด์์ธ๊ฐ์?
UIKit์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋ํ ๋ถ๋ถ์ ๋ด๋นํฉ๋๋ค.
UIKit์์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ๋ฅผ Responder ๊ฐ์ฒด์๊ฒ ์ ๋ฌํด์ ์ฒ๋ฆฌํฉ๋๋ค.
Responder๋ UIResponder์ ์ธ์คํด์ค์ ๋๋ค. UIViewConroller๋ Responder์ ๋๋ค.
Responder๋ UIResponder์ ์๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฉ์๋์ค์ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด์ ๊ตฌํํด์ผ ํฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ ๊ทธ๋ผ first responder์ ๋ํด์ ๋งํด๋ณด์ค๋์?
UIKit์์๋ Responder๋ค์ ์ฐ๊ฒฐํด์ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ฅผ Responder Chain์ด๋ผ๊ณ ํฉ๋๋ค. Responder Chain์ ๋งํฌ๋ ๋ฆฌ์คํธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด๋ฒคํธ๋ฅผ ๋ฐ์ Responder๋ ์์ ์ด ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ Responder Chain์ ์๋ ๋ค์ Responder์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
First Responder๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ ๋ฌ๋ฐ๋ Responder๋ผ๋ ์๋ฏธ์ ๋๋ค. ์ฆ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌํ Responder๋ผ๋ ๊ฒ์ ๋๋ค.
๐๐ปโโ๏ธ 4-3: UINavigationController์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
์คํ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ปจํ ์ด๋ ๋ทฐ์ปจํธ๋กค๋ฌ ์ ๋๋ค.
๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์คํ์ ๋ด์์ ๊ด๋ฆฌํฉ๋๋ค. (์๋ฃ๊ตฌ์กฐ Stack์ FILO ํน์ฑ์ ๊ทธ๋๋ก ๋ฐ์ํฉ๋๋ค.)
๊ฐ์ฅ ์๋์ ์์นํ ๋ทฐ์ปจํธ๋กค๋ฌ๋ rootViewController๋ก ์ปจํ ์ด๋๋ฅผ ๋น ์ ธ๋์ฌ ์ ์๋ ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋๋ค.
UINavigationController์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ์ push, popํ ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ present์ pushViewController๋ ์ด๋ค ์ฐจ์ด์ ์ด ์์ฃ ?
present๋ ํ์ฌ ํ๋ฉด ์์ ์๋ก์ด view controller์ ๋ชจ๋ฌ์ฐฝ์ผ๋ก ๋์๋๋ค.
๋ค๋น๊ฒ์ด์ ์ pushViewController ๋ฉ์๋๋ ๋ค๋น๊ฒ์ด์ ์คํ์ view controller๋ฅผ ์ถ๊ฐํ๊ณ ์ต์๋จ์ ๋์์ฃผ๋ฉฐ, navigation bar๋ฅผ ์๋ ์์ฑํ์ฌ ๋ณด์ฌ์ค๋๋ค.
๐๐ปโโ๏ธ 4-4: ViewController์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์
init(nibName:bundle:)
or init(coder:)
: ๋ทฐ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
loadView()
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ฉ๋๋ค.
viewDidLoad()
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์งํ ํธ์ถ๋ฉ๋๋ค.
viewWillAppear(_:)
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
viewWillLayoutSubviews()
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ์๋ธ๋ทฐ๋ค์ ๋ ์ด์์ํ๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
viewDidLayoutSubviews()
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ์๋ธ๋ทฐ๋ค์ ๋ ์ด์์ํ ์งํ ํธ์ถ๋ฉ๋๋ค.
viewDidAppear(_:)
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋ ์งํ ํธ์ถ๋ฉ๋๋ค.
viewWillDisappear(_:)
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
viewDidDisappear(_:)
: ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง ์งํ ํธ์ถ๋ฉ๋๋ค.
deinit
: ๋ทฐ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ ๊ฐ๊ฐ์ ๋ฉ์๋์์ ์ด๋ค ์์ ์ ํ๋ฉด ์ข์๊น์?
viewDidLoad()
: ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋ก๋๋ ๋ ์ฒ์์ ํ ๋ฒ๋ง ํธ์ถ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ทฐ์ปจํธ๋กค๋ฌ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ฑฐ๋, ๋ทฐ๋ฅผ ์ด๊ธฐํํ๋ ์์
viewWillAppear(_:)
: ๋ทฐ๊ฐ ๋ํ๋ ๋ ๋ง๋ค ์ํํด์ผ ํ๋์์
. ์๋ฅผ ๋ค์ด ์๋ก์ด ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํ๋ฉด ๊ฐฑ์
viewDidAppear(_:)
: ๋ทฐ๊ฐ ๋ํ๋์ ๋ง์ ์์ํด์ผ ํ๋ ์์
. ์๋ฅผ ๋ค์ด ์ ๋๋ฉ์ด์
viewWillDisappear(_:)
: ๋ทฐ๊ฐ ์ฌ๋ผ์ง๊ธฐ ์ ์ ์์ํด์ผ ํ๋ ์์
. ์๋ฅผ ๋ค์ด ์ ๋๋ฉ์ด์
, ์
๋ ฅ๋ ๋ฐ์ดํฐ์ ์ฅ
viewDidDisappear(_:)
: ๋ทฐ๊ฐ ์ฌ๋ผ์ง ๋ ๋ง๋ค ์ํํด์ผ ํ๋ ์์
. ์๋ฅผ ๋ค์ด ๋ฉ๋ชจ๋ฆฌ์์ ๋ทฐ์ปจํธ๋กค๋ฌ ๋ฐ์ดํฐ๋ฅผ ํด์ ํ๋ ์์
deinit
: ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ์ํํด์ผ ํ๋ ์์
. ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ํด์ (๊ฐ์ฒด ์ฐธ์กฐ ํด์ )
๐๐ปโโ๏ธ 5-1 : UIView์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
UIView๋ ์ง์ฌ๊ฐํ ๋ชจ์์ ํ๋ฉด์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ๋๋ค.
UIKit Core Graphics๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฌ๊ฐํ ์์ญ์ ์ฝํ ์ธ ๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
Layout์ ์ฌ์ฉํ์ฌ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ทฐ์ ํฌ๊ธฐ, ์์น๋ฅผ ์กฐ์ ํ๋ ๊ท์น์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฒคํธ์ ์๋ตํ ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ UIView ์์ Layer ๊ฐ์ฒด๋ ๋ฌด์์ด๊ณ ์ด๋ค ์ญํ ์ ๋ด๋นํ๋์?
๊ทธ๋ํฝ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ GPU์ ์ง์ ์ ๊ทผํด์ ๊ทธ๋ฆฌ๋ฉด ๋ ๋๋ง ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด์ง๋ง ์ฝ๋์ ์์ด ๋ง์ ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๊ณ ์์ค ํ๋ ์์ํฌ์ธ Core Animation๊ณผ UIKit ํ๋ ์์ํฌ๊ฐ ์๊ธฐ๊ฒ ๋์์ต๋๋ค.
UIKit์ Core Animation๋ณด๋ค ํ ๋จ๊ณ ๋์ ์์ค์ API ์ ๋๋ค.
์ฆ, Core Animation๋ณด๋ค ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฝ๋ค๋ ๋ง์ด๊ธฐ๋ ํฉ๋๋ค.
UIView.layer๋ CALayer์ ๊ฐ์ฒด ์ ๋๋ค. CALayer๋ Core Animation์์ ์ ๊ณตํ๊ณ , UIView๋ UIKit์์ ์ ๊ณตํฉ๋๋ค.
layer๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ๋ ๋ณต์กํ ์ ๋๋ฉ์ด์ ๊ณผ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ 5-2 : UIWindow์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
๋ทฐ๋ค์ ๋ด์ ์ ์๋ ๋น์ด์๋ ์ปจํ ์ด๋ ์ ๋๋ค. ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํด์ฃผ๋ ๋งค๊ฐ์ฒด ์ญํ ์ ํฉ๋๋ค.
iOS ์ฑ์ ์ต์ ํ๋ ์ด์์ ์๋์ฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์คํ ๋ฆฌ๋ณด๋๋ก ๊ฐ๋ฐํ ๋๋ ์๋์ฐ๊ฐ ์๋ ์์ฑ๋์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ SceneDelegate
์ UIWindow๋ฅผ ๋ง๋ค์ด rootViewController๋ฅผ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๐๐ปโโ๏ธ 6-1 : TableView๋ฅผ ๋์ ๋ฐฉ์์ ์ค๋ช ํด ์ฃผ์ธ์
ํ ์ด๋ธ๋ทฐ๋ ์ฌ์ฌ์ฉํ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
ํ๋ฉด์ ๋ณด์ด๋ cell๊ณผ ์ ๋ค์ cell ๋ช ๊ฐ๋ง ๋ง๋ค์ด๋๊ณ , ๋๋จธ์ง๋ ์คํฌ๋กค์ ์ํด ์์ฑ๋ฉ๋๋ค.
dequeueReusableCell()
์ ์ฌ์ฉํด์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ cell์ด ์ฌ์ฌ์ฉํ์ ์๋์ง ํ์ธํ๊ณ , ์์ผ๋ฉด ์ฌ์ฌ์ฉํ์์ ๊บผ๋ด์ cell์ ์ฌํ์ฉํฉ๋๋ค. (identifier๋ฅผ ํตํด ํ์ธ)
cell์ด ํ๋ฉด์ ๋ณด์ฌ์ง๊ธฐ ์ง์ ์ WillDisplayCell
ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
์คํฌ๋กค์ ํตํด cell์ด ํ๋ฉด ๋ฐ์ผ๋ก ๋ฒ์ด๋๊ฒ๋๋ฉด didEndDisplayingCell
ํจ์๊ฐ ํธ์ถ๋๊ณ , cell์ ์ฌ์ฌ์ฉํ์ ๋ค์ด๊ฐ์ ๋๊ธฐํฉ๋๋ค.
iOS 10+ ๋ถํฐ๋ UITableViewDataSourcePrefetching
ํ๋กํ ์ฝ์ ์ฑํํจ์ผ๋ก์จ ํ๋ฉด์ ๋ณด์ด์ง ์๋ cell์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ํธ์ถํ์ฌ ํ
์ด๋ธ๋ทฐ๊ฐ ์คํฌ๋กค๋ ๋ cell์ ๋ ๋น ๋ฅด๊ฒ ๋ก๋ํ ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ 6-2 : TableView ํ๋ฉด์ Cell์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ต์ํ ๊ตฌํํด์ผ ํ๋ DataSource ๋ฉ์๋๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์
์น์ ๋ง๋ค ํ์ํ ์ ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
func tableView(UITableView, numberOfRowsInSection: Int)
์ธ๋ฑ์ค๋ง๋ค ์ด๋ค ์ ์ ์ฌ์ฉํ ์ง ๋ฐํํ๋ ๋ฉ์๋๋ก, cell์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๊ฑฐ๋ ์กฐ์ํ์ฌ return ํฉ๋๋ค.
func tableView(UITableView, cellForRowAt: IndexPath)
๐๐ปโโ๏ธ 6-3 : TableView์ CollectionView์ ์ฐจ์ด์ ์ ์ค๋ช ํด ์ฃผ์ธ์
tableView๋ ์ธ๋ก ์คํฌ๋กค๋ง ์ง์ํ๋ฉฐ, ๋จ์ผ ์ปฌ๋ผ, ๋จ์ผ ์น์ ๋ ์ด์์๋ง ์ง์ํฉ๋๋ค.
collectionView๋ ์ํ์ข์ฐ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ค์ค ์ปฌ๋ผ์ ๊ฐ์ง ์ ์๊ณ , ๋ค์ํ ๋ ์ด์์์ ์ต์ ์ ์ง์ํฉ๋๋ค.
๐๐ปโโ๏ธ 6-4 : prepareForReuse์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
ํ ์ด๋ธ๋ทฐ๋ ๊ฐ์ identifier๋ฅผ ๊ฐ์ง cell์ ์ฌ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
ํ๋ฉด์์ ์ฌ๋ผ์ง ์ ์ ์ฌ์ฌ์ฉํ์ ์ ์ฅ๋๊ณ ๊ฐ์ identifier๋ฅผ ๊ฐ์ง cell์ ํธ์ถํ ๋ ์ฌ์ฌ์ฉ๋ฉ๋๋ค.
prepareForReuse
๋ ํ
์ด๋ธ ๋ทฐ cell์ด ์ฌ์ฌ์ฉ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค.
prepareForReuse๋ cellForItemAt
์ด ํธ์ถ๋๊ธฐ ์ ์ ํธ์ถ๋์ด์ ์
์ ์ค์ ๋ค์ ์ด๊ธฐํํ ์ ์๋๋ก ๋์์ค๋๋ค.
๐๐ปโโ๏ธ 7-1 : URLSession์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
URLSession์ ๋คํธ์ํฌ ํต์ ์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ํ๋ ์์ํฌ์ ํด๋์ค์ ๋๋ค. Foundation ํ๋ ์์ํฌ์ ํฌํจ๋์ด ์์ต๋๋ค.
SessionTask๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ํต์ ์ ๋ํ ์ค์ ๊ณผ ์ฝ๋ฐฑ์ ์ ์ํด์ ๋๊ธฐ๋ฉด ๋คํธ์ํฌ ํต์ ์ด ์๋ฃ๋์์ ๋ ํด๋ก์ ๊ฐ ์คํ๋ฉ๋๋ค.
URLSession์ ๋ด๋ถ์ ์ผ๋ก GCD๋ฅผ ์์ฉํ์ฌ ๋คํฌ์ํฌ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ GCD๋ก ์ด๋ป๊ฒ์? ์์ธํ ์ค๋ช ํด์ฃผ์ธ์
URLSession์์ ๋ฐ์ดํฐ ์์ฒญ์ ์์ํ๋ฉด, GCD๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํฉ๋๋ค.
FIFO๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์์ฒญ์ด ๋ค์ด์จ ์์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค. ์ฆ, ์์ ํ๋ ๋์ UI๋ฅผ ๋ฉ์ถ์ง ์๊ณ ์ฌ์ฉ์์ ๊ณ์ํด์ ์ํธ์์ฉ ํ ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ 7-2 : URLDownloadTask์ URLSessionDataTask๋ฅผ ๋น๊ตํด์ ์ค๋ช ํด ์ฃผ์ธ์.
๋ ๋ค URLSession์์ ์ ๊ณตํ๋ ๋คํธ์ํฌ ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํด๋์ค์ ๋๋ค. ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์์ ์ ์ํํฉ๋๋ค.
downloadTask๋ ํ์ผ ๋ค์ด๋ก๋์ ํนํ๋ ์์ ํด๋์ค ์ ๋๋ค.
๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํน์ ๊ฒฝ๋ก์ ์ ์ฅํ๋ค๋ฉด ํ์ผ์ ์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํ ์ ์์ต๋๋ค.
์ ์ฅ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ์ ์บ์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ์ฑ์ด ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
dataTask๋ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๋ค์ด๋ก๋๋ฅผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
NSData ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ์ ์ฅ์์๋ ์ ์ฅํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ dataTask๋ฅผ ํตํด ์ฉ๋์ด ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์ข ๋ฅ
์์, ์์ , ์ด๋ฏธ์ง, PDF
JSOM, XML
๋ฐ์ดํฐ์ ํฌ๊ธฐ
ํฐ๊ฑฐ
์์๊ฑฐ
๋ฐ์ดํฐ์ ์ ์ฅ
๋ก์ปฌ(์๊ตฌ ์ ์ฅ ๊ฐ๋ฅ)
๋ฉ๋ชจ๋ฆฌ
๐๐ปโโ n-1 : UIKit ํด๋์ค๋ค์ ๋ค๋ฃฐ ๋ ๊ผญ ์ฒ๋ฆฌํด์ผํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๋ ๋ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ?
mainThread : UIKit์ UI๋ฅผ ๋ค๋ฃจ๋ ํ๋ ์์ํฌ ์ ๋๋ค. UI์ ๊ด๋ จ๋ ์ฝ๋๋ ๋ฐ๋์ mainThread์์ ๋์ํด์ผ ํฉ๋๋ค.
๐๐ปโโ๏ธ n-2 : ์์ ๋ง์ Custom View๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋์ง ์ค๋ช ํ์์ค.
custom view๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ UIView๋ฅผ ๋ฐ๋์ ์์ํด์ผ ํฉ๋๋ค.
์ด๋์
๋ผ์ด์ ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ super.init(frame: CGRect)
๋ฅผ ๋ฐ๋์ ํธ์ถํด์ผ ํ๋ฉฐ, required init?(coder: NSCoder)
๋ ํจ๊ป ์์ฑํด์ผ ํฉ๋๋ค.
๐๐ปโโ n-3 : ๋ทฐ์ ์์น๋ ํฌ๊ธฐ๋ฅผ ์ฌ์กฐ์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋์?
frame์ ์ฌ์ฉํฉ๋๋ค. frame.origin์ ํตํด x,y ์ขํ๊ฐ์ผ๋ก view๋ฅผ ์ด๋ํ๊ณ , frame.size๋ฅผ ํตํด width, height๊ฐ์ ํตํด ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
frame์ ์ฌ์ฉํ๋ฉด ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
autolayout์ ์ฌ์ฉํฉ๋๋ค. ๋ทฐ์ ์์น์ ํฌ๊ธฐ๋ฅผ constraints๋ก ์ง์ ํ์ฌ ์์ ๋ทฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ทฐ์ ์์น์ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ์กฐ์ ํฉ๋๋ค.
autolayout์ ์ฌ์ฉํ๋ฉด ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋์ํ์ฌ ๋ทฐ๋ฅผ ์ ์ฐํ๊ฒ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
CGAffineTransform์ ์ฌ์ฉํฉ๋๋ค. ๋ทฐ์ ๋ณํ์ ๋ํ๋ด๋ ๊ตฌ์กฐ์ฒด๋ก, ๋ทฐ์ ํ์ , ํ๋, ์ถ์ ๋ฑ์ ๋ณํ์ ์ค ์ ์์ต๋๋ค.
๋ณต์กํ ๋ทฐ์ ์ด๋, ์ ๋๋ฉ์ด์ ์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
๐๐ปโโ n-4 : Foundation Kit์ ๋ฌด์์ด๊ณ ํฌํจ๋์ด ์๋ ํด๋์ค๋ค์ ์ด๋ค ๊ฒ์ด ์๋์ง ์ค๋ช ํด ์ฃผ์ธ์
Cocoaํ๋ ์์ํฌ์์ ์ ๊ณต๋๋ ๊ธฐ๋ณธ ํ๋ ์์ํฌ ์ ๋๋ค.
objc์ swift์์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ํ ํ๋ซํผ (macOS, iOS, watchOS, tvOS)์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ด๋ฆฌ, ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ ๊ด๋ฆฌ, ๋คํฌ์ํน, ๋ฌธ์์ด ์ฒ๋ฆฌ, ๋ ์ง ๋ฐ ์๊ฐ ์ฒ๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ํ์ ์ธ ํด๋์ค๋ค
๐๐ปโโ n-5 : NSCache์ ๋์ ๋๋ฆฌ๋ก ์บ์๋ฅผ ๊ตฌ์ฑํ์๋์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์.
key-value
์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ผ๋ ๊ณตํต์ ์ด ์์ต๋๋ค.
NSCache๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฉด ์๋์ผ๋ก ์บ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํจ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธก๋ฉด์์ ์ ์ฉํฉ๋๋ค.
NSCache๋ ๋์์ ์ฌ๋ฌ ์ค๋ ๋์์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
๋์ ๋๋ฆฌ๋ thread-safeํ์ง ์์์ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์ ์ ๊ทผํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ฑ๋ฅ ์ธก๋ฉด์์ NSCache๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅํ์ง๋ง ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฏ๋ก ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์ด๊ฑฐ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ ๋๋ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ NSCache๋ ์ thread-safeํ๊ฐ์?
๋์ ๋๋ฆฌ์ ๋ฌ๋ฆฌ NSCache๋ ๋ด๋ถ์ ์ผ๋ก ๋ฎคํ ์ค์ ๊ฐ์ ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ NSCache๋ ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋์?
์บ์๋ ๊ฐ์ฒด๊ฐ ๋ง์์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
NSCache๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์บ์๋ ๊ฐ์ฒด์ ์ด ํฌ๊ธฐ๋ฅผ ์ ํํ๊ณ , ์ ํ์ ๋๋ฌํ๋ฉด LRU์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ค๋ ์ ์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ด๋ฐ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ๋๋ฌธ์ ๋์ ๋๋ฆฌ๋ณด๋ค ๋ง์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค.
๐๐ปโโ๏ธ n-6 : setNeedsDisplay์ setNeedsLayout ์ฐจ์ด์ ์ ๋งํด์ฃผ์ธ์.
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ โ์ด๋ค ๊ฒ์ ๋ค์ ํํํ๋๊ฐโ ์ ๋๋ค.
๋ ํจ์๋ ๋ชจ๋ update cycle์ ๋์ํฉ๋๋ค. ์ด ์ง์ ์์๋ view๋ฅผ ๋ฐฐ์นํ๊ณ ๋ค์ ๊ทธ๋ฆฌ๋ ์์
์ ์์ฒญ
ํฉ๋๋ค.
setNeedsDisplay๋ view๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ์์ ์, setNeedLayout์ layout์ ์ฌ๋ฐฐ์นํ๋ ์์ ์ ์์ฒญํฉ๋๋ค.
๐๐ปโโ๏ธ๐๐ปโโ๏ธ ๋ ํจ์๋ฅผ ํธ์ถํ์ง ์์๋ View๊ฐ ๋ณ๊ฒฝ ๋๋๋ฐ์?
UIView์์๋ ๋ด๋ถ์์ setNeedDisplay๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์๋ฅผ๋ค์ด layoutSubview๊ฐ ํธ์ถ ๋ ๋, ์๋์ผ๋ก setNeedsDisplay๊ฐ ํธ์ถ๋์ด view๋ฅผ ๋ค์ ๊ทธ๋ฆด ๊ฒ์ ์์ฒญํฉ๋๋ค.
๐๐ปโโ๏ธ n-7 : ํ๋์ View Controller ์ฝ๋์์ ์ฌ๋ฌ TableView Controller ์ญํ ์ ํด์ผ ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋๊ฒ ์ข์๊น์?
tableView์ tag๋ฅผ ๋ฌ์ switch๋ฌธ์ ์ฌ์ฉํด์ tag๋ฒํธ ๋ณ ๋ฐ์ดํฐ์์ค๋ฅผ ๋ฌ๋ฆฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ViewController์ childController์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด TableView๋ฅผ ํ๋์ฉ ๋งก์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Section์ ๊ตฌ๋ถํ์ฌ switch๋ฌธ์ ์ฌ์ฉํด์ ์น์ ๋ณ๋ก tableView๋ฅผ ๋ฌ๋ฆฌ ๋ณด์ฌ์ค ์๋ ์์ต๋๋ค.