์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ํจ์คํธ์บ ํผ์ค
- Swfit
- realm
- MVVM
- Flutter
- SnapKit
- XCTest
- arkit
- RxSwift
- swift
- CollectionView
- reactorkit
- Xcode
- Kuring
- BFS
- ios
- SwiftUI
- ํ๋ก๊ทธ๋๋จธ์ค
- visionOS
- designpattern
- tableView
- BOJ
- ๋ฐฑ์ค
- Lv2
- combine
- node.js
- UIKit
- raywenderlich
- rxcocoa
- TCA
Archives
- Today
- Total
lgvv98
iOSInterviewquestions - iOS ๋ณธ๋ฌธ
โ ๏ธ deprecated โ ๏ธ/๐ง๐ป๐ป iOSInterviewquestions
iOSInterviewquestions - iOS
๐ฅ ์บ๋ฟ๋งจ 2022. 4. 6. 18:50iOSInterviewquestions - iOS
๋ชฉ์ : ๋ฐฐ์ธ๋๋ ์ํ๋๋ฐ, ๋์ด๊ฐ ๋จน์ผ๋๊น ์๊พธ ๊น๋จน์ด์ ์๋ ๊นํ๋ธ ๊ธ์ ๋ฐํ์ผ๋ก ๊พธ์คํ ์ด๋ก ๊ณต๋ถ๋ฅผ ํ๊ณ ์ ํจ. ๋ฌผ๋ก ์ค๋ช ์ ๋ด๊ฐ ์ ์๋๊ฒ ๋ชฉ์ ์ด๋ผ ์ฒ ์ ํ ๋๋ฅผ ์ดํด์ํฌ ์ ์๋ ๋์ ์ธ์ด๋ก ์์ฑ.
์์ฑ์ผ : 2022๋ 4์ 06์ผ
- README: ์ถํ์ ์์ ์ด ์์ ๊ฒฝ์ฐ ์๋์ ๋ ์ง์ ์๊ฐ์ ์์ฑํ๊ณ , ์์ ๋ด์ฉ์ ๊ฐ๋ตํ ์ ๋ฆฌํด์ฃผ์ธ์.
์์)
(์์ ) oooo๋ oo์ oo์ผ oo์ oo๋ถ
- ๋ณ๊ฒฝ๋ด์ฉ : xxx์ ๋ํ ์๋ฃ๋ฅผ ๋ณด๊ฐ
โ ๊ณต๋ถ์ ๊ธฐ์ค์ด ๋๋ ๊นํ๋ธ ๊ธ
https://github.com/JeaSungLEE/iOSInterviewquestions
โ iOS
- Bounds ์ Frame ์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
- frame์ superview์ ์ขํ ์์คํ ์์ ๋ทฐ์ ์์น์ ์ฌ์ด์ฆ๋ฅผ ๋ํ๋
- bounds๋ ์์ ์ ์ขํ ์์คํ ์์ ๋ทฐ์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ํ๋
- frame์ view์ ์์น๋ ํฌ๊ธฐ๋ฅผ ์๊ณ ์ถ์๋, bounds๋ view์ ํฌ๊ธฐ๋ ๋ด๋ถ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด๋ ์ฌ์ฉ
- ์ค์ ๋๋ฐ์ด์ค๊ฐ ์์ ๊ฒฝ์ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ ์ ์๋ ๊ฒ๊ณผ ์๋ ๊ฒ์ ์ค๋ช
ํ์์ค.
- ํ๋์จ์ด์ ๊ฐ์๋ ์ผ์, ๊ฐ์๊ณ, GPS, ์ฃผ๋ณ๊ด ์ผ์ ๋ฑ์ ์ด์ฉํ ์ ์๋ค. ์นด๋ฉ๋ผ, ๋ง์ดํฌ, ์ ํ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค
- API ์ค ํธ์์๋ฆผ๊ณผ ์ฌ์ง, ์ฐ๋ฝ์ฒ, ์บ๋ฆฐ๋์ ์ก์ธ์คํ๊ธฐ ์ํ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ์๋ฆผ, handoff ๋ฐ messageUI ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
- ๋๋จธ์ง๋ก๋ ๋งฅ์ ์ฑ๋ฅ์ด ์์ดํฐ๋ณด๋ค ๋ ๋ฐ์ด๋ CPU๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ์ผ๋ง๋ ๋๋์ง ์ ์ ์๊ณ , ๋คํธ์ํฌ ์๋ ํ ์คํธ๋ ๋ถ๊ฐํ๋ฉฐ,ํ์ด์ค ์์ด๋๋ ์ง์ ์ผ๊ตด ์ธ์์ ๋์ง ์์ผ๋, ์ธ์ ๋ฐ ๋น์ธ์ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค.
- ์ฑ์ ์ฝํ
์ธ ๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์ ์ฅ/๋ณด๊ดํ๋ ํน๋ณํ ๊ฐ์ฒด๋ฅผ ๋ฌด์์ด๋ผ๊ณ ํ๋๊ฐ?
- ์์นด์ด๋ธ : iOS์์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ํํ ๋ฐฉ๋ฒ์ด๋ค.
- ์์นด์ด๋น : ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ชจ๋ ๊ธฐ๋กํ๊ณ , ํ์ผ์์คํ ์ ๋ด์ฉ์ ์ ์ฅํ๋ค.
- ์ธ์์นด์ด๋น : ์์นด์ด๋ธํ ๋ฐ์ดํฐ๋ก ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ง๋ ๋ค.
-
class Car: NSCoding { var name : String = "" var nemesis : Car var model : Int //์์นด์ด๋น func encode(with enCoder: NSCoder) { enCoder.encode(name, forKey: "name") enCoder.encode(nemes, forKey: "nemes") enCoder.encode(model, forKey: "model") } //๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํค-๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋์ด์ ํ์ผ์์คํ ์ ์ ์ฅ๋๋ค. required init?(coder aDecoder: NSCoder) { name = aDecoder.decodeObject(forKey: "name") as! String nemesis = aDecoder.decodeObject(forKey: "nemesis") as! Car? model = aDecoder.decodeInteger(forKey: “model") } }
- UserDefaults : ํค - ๊ฐ ์์ผ๋ก ์ ์ฅํ๋ ์ธํฐํ์ด์ค์ด๋ค.
- ๋ฐํ์์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ๊ฐ์ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ํ์ํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด ํ์๊ฐ ์๋ค. ๋์ฉ๋์ ๋ฐ์ดํฐ๋ณด๋ค, ์๋๋ก๊ทธ์ธ ์ฌ๋ถ, ์์ด๋, ํ๊ฒฝ์ค์ ์์์ ์ค์ ๋ฐ์ดํฐ๊ฐ๊ณผ ๊ฐ์ ๋จ์ผ ๋ฐ์ดํฐ ๋ฑ์ ๋ณด๊ดํ๋ค.
- CoreData : ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ Framework์ด๋ค.
- SQLite์ ๊ฐ์ด ํ ์ด๋ธ์ ์ด์ฉํ์ง ์๊ณ , ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ, ๋ฐ์ดํฐ๋ฅผ ์ด์ํ๊ธฐ์ ๋ ๋ง์ ์ ์ฅ๊ณต๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค. ๊ทธ๋ ์ง๋ง ๋์ฑ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค. Data Model์ ์์ฑํ ํ์ Entity๋ฅผ ์์ฑํ๋ค.
- SQLite : Swift์ ํน๋ณํ ์ค์น ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
- C์ธ์ด๋ก ์์ฑ๋์ด ์๊ธฐ์ ๋งค์ฐ ๊ฐ๋ฒผ์ด ๊ฒ์ด ํน์ง์ด๋ฉฐ, ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์คํฌ ํ์ผ 1๊ฐ์ ์ ์ฅํ๊ณ ์ค์ ์์ฒด๊ฐ ๋งค์ฐ ๊ฐํธํ๊ธฐ์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์์ํ๋ค. SQLite๋ iOS, Android, Linux, Window ๋ฑ๊ณผ ๊ฐ์ด ๋ค์ํ ์ด์์ฒด์ ์์ ์ฌ์ฉ๋๊ณ , ์๋ง์ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ ๊ทผ์ผ๋ก๋ถํฐ ์์ ํ๋ค.
- Realm : SQLite์ ๊ฐ์ด ์คํ์์ค์ด๋ฉฐ, ๋ชจ๋ฐ์ผ์ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- SQLite, Core Data๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๊ณ ์ฑ๋ฅ๋ฉด์์ ๋ ์ฐ์ํ๋ค. ๋ง์ ์์ ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฝ๋๊ฐ ๋ง์ด ํ์ํ์ง ์์ผ๋ฉฐ, ๋ฉ์ธ ์ค๋ ๋์์ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ ์์ ์ ๋ชจ๋ ํ ์ ์์ด์ ํธ๋ฆฌํ๋ค. ๋์ฉ๋์ ๋ฐ์ดํฐ์ ๋ํด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฉ๋์ด ์ ๊ณ ํผ์ ์๊ด์์ด ์๋์ ์ฑ๋ฅ์ด ์ ์ง๋๋ค.
- ์ฑ ํ๋ฉด์ ์ฝํ
์ธ ๋ฅผ ํ์ํ๋ ๋ก์ง๊ณผ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๊ฐ์ฒด๋ฅผ ๋ฌด์์ด๋ผ๊ณ ํ๋๊ฐ?
- UIViewController : View hierarchy๋ฅผ ๊ด๋ฆฌํ๋ ์ค๋ธ์ ํธ๋ก Content ViewController์ Container ViewController๊ฐ ์๋ค.
- (์ถ๊ฐ๋ก ์๋ฉด ์ข์ ๊ฒ๋ค)
- UIApplication ๊ฐ์ฒด
- UIApplication์ ๋ฉ์ธ ์ด๋ฒคํธ ๋ฃจํ์ ๊ฐ์ ๊ฒ๋ค์ ๋ด๋นํ๋ ๊ฐ์ฒด๋ก ์ฑ ์ํ ๋ณํ๋ ํธ์ ๋ฉ์์ง ๋์ฐฉ์ฒ๋ผ ํน์ํ ํํ์ ์ด๋ฒคํธ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด์ ์ ๋ฌํ์ฌ, ์ฌ์ ์ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋๋ก ํ๋ค.
- App Delegate ๊ฐ์ฒด
- App Delegate ๊ฐ์ฒด๋ UIApplication ๊ฐ์ฒด์ ์๋ก ์ฐ๊ฒฐ๋์ด ์ฑ์ ์ด๊ธฐํ, ์ํ ๋ณํ, ๊ธฐํ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋ง ํ๋ ์ญํ ์ ํ๋ค. ์ด ๊ฐ์ฒด๋ ๊ฐ ์ฑ์์ ๋ฐ๋์ ํ๋๋ง ์กด์ฌํ๋๋ก ์์คํ ์ ์ํด ๋ณด์ฅ๋๋ค. (๋๋ฌธ์ ์ฑ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
- UIWindow ๊ฐ์ฒด
- UIWindow ๊ฐ์ฒด๋ ํ๋ฉด์์ ํ๋ ์ด์์ ๋ทฐ์ ๋ํ ํํ์ ์กฐ์ ํ๋ ์ญํ ์ ํ๋ค. ๋๋ถ๋ถ์ ์ฑ๋ค์ ๋ฉ์ธ ํ๋ฉด์ ์ฝํ ์ธ ๋ฅผ ํํํด์ฃผ๋ ํ๋์ ์๋์ฐ๋ง ๊ฐ์ง์ง๋ง, ๊ฐ์ฒด๋ ์ธ๋ถ ํ๋ฉด์ ํ์๋๋ ์ปจํ ์ธ ๋ฅผ ํํํด์ฃผ๋ ๋ถ๊ฐ์ ์ธ ์๋์ฐ๋ฅผ ๊ฐ์ง ์๋ ์๋ค. ์ฐ๋ฆฌ๋ ์ฑ์ ์ฝํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ ๋, ๋ถ๊ฐ์ ์ธ ์๋์ฐ๋ฅผ ๊ฐ์ง๋ค๊ณ ํด์ ์๋์ฐ ์์ฒด๋ฅผ ๊ต์ฒดํด์๋ ์๋๋ฉฐ, ViewController๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
- UIApplication ๊ฐ์ฒด
- (์ฐธ๊ณ ) https://sibalja.tistory.com/3
- (์ฐธ๊ณ ) https://www.notion.so/32b4a19f75d04f33ad92cdde611b189e
- App thinning์ ๋ํด์ ์ค๋ช
ํ์์ค.
- ์ฑ์ด ๋๋ฐ์ด์ค์ ์ค์น๋ ๋, ์ฑ์คํ ์ด์ OS๊ฐ ๋๋ฐ์ด์ค์ ํน์ฑ์ ๋ง๊ฒ ์ค์น๋๋๋ก ํ๋ ์ค์น ์ต์ ํ ๊ธฐ์ ์ ๋งํจ. ์ต์ํ์ ๋์คํฌ ์ฌ์ฉ๊ณผ ๋น ๋ฅธ ๋ค์ด๋ก๋ ์ ๊ณต. ์ฑ ์๋์, slicing, bitcode, on-demand resouce๊ฐ ์๋ค.
- slicing : ์ฑ์ด ์ง์ํ๋ ์ฌ๋ฌ ๋๋ฐ์ด์ค์ ๋ํด ๊ฐ๊ฐ ์กฐ๊ฐ ์ฑ ๋ฒ๋ค์ ์ํํ๊ณ ํด๋น ๋๋ฐ์ด์ค์ ๊ฐ์ฅ ์ ํฉํ ์กฐ๊ฐ์ ์ ๋ฌํ๋ ๊ธฐ์
- bitcode : ๋นํธ์ฝ๋๋ ๊ธฐ๊ณ ์ธ์ด๋ก ๋ฒ์ญ๋๊ธฐ ์ด์ ๋จ๊ณ์ ์ค๊ฐํํ์ ๋งํจ.
- on-demand-resource : ํ์ํ ๋ ๋ค์ด๋ก๋๋ฅผ ๋ฐ๋๋ค๋ ์๋ฏธ๋ก ์ฌ์ฉ์๊ฐ ํ์ํ์ง ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๊ณ ์์ง ์๋ค๊ฐ ์ฌ์ฉํ ๋, ๋ค์ด๋ก๋๋ฅผ ๋ฐ๋๋ค.
- (์ฐธ๊ณ ) https://ttuk-ttak.tistory.com/42
- ์ฑ์ด ๋๋ฐ์ด์ค์ ์ค์น๋ ๋, ์ฑ์คํ ์ด์ OS๊ฐ ๋๋ฐ์ด์ค์ ํน์ฑ์ ๋ง๊ฒ ์ค์น๋๋๋ก ํ๋ ์ค์น ์ต์ ํ ๊ธฐ์ ์ ๋งํจ. ์ต์ํ์ ๋์คํฌ ์ฌ์ฉ๊ณผ ๋น ๋ฅธ ๋ค์ด๋ก๋ ์ ๊ณต. ์ฑ ์๋์, slicing, bitcode, on-demand resouce๊ฐ ์๋ค.
- ์ฑ์ด ์์ํ ๋ main.c ์ ์๋ UIApplicationMain ํจ์์ ์ํด์ ์์ฑ๋๋ ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ?
- UIApplication์ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋๋ค.
- (์ฐธ๊ณ ) https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md
- @Main์ ๋ํด์ ์ค๋ช
ํ์์ค.
- Swift 5.3๋ถํฐ๋ @main(UIApplicationMain ๋์ ์)์ ์ฌ์ฉํ๋ค. UIKit ๊ธฐ๋ฐ ์ฑ์ main entry point์ด๋ค.
- (์ฐธ๊ณ ) https://jinnify.tistory.com/18
- ์ฑ์ด foreground์ ์์ ๋์ background์ ์์ ๋ ์ด๋ค ์ ์ฝ์ฌํญ์ด ์๋์?
- foreground mode๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๊ธฐํ ์์คํ ๋ฆฌ์์ค์ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, ์์คํ ์ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ์์ ๋ฐ๋ผ background์ฑ์ ์ข ๋ฃํ๋ค. background mode๋ ๊ฐ๋ฅํ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ธฐ ์ด๋ ต๊ณ ๊ณต์ ์์คํ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ณ ์ด๋ฏธ์ง ๊ฐ์ฒด ์ฐธ์กฐ ๋ฑ ๋ฉ๋ชจ๋ฆฌ ์ ํ.
- ์ํ ๋ณํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฑ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ค์ ์ค๋ช
ํ์์ค.
- iOS 12 ์ดํ ๋ฒ์ ์์๋ AppDelegate๊ฐ 2๊ฐ์ง ์ญํ ์ ํ๋๋ฐ, process level์ ์ด๋ฒคํธ ๋ฐ์์ ์๋ ค์ฃผ๊ณ , UI์ํ ๋ณํ๋ฅผ ์๋ ค์ฃผ์๋ค. (1 process & 1 user interface)
- iOS 13๋ถํฐ๋ ์ํ ๋ณํ์ ๋ฐ๋ฅธ ๋์์ SceneDelegate๊ฐ ๋ด๋นํ๊ฒ ๋์์. (1 process & multiple user interface)
- ๊ธฐ์กด์๋ UIWindow์์ ๊ฐ์ฒด์ ๋ํ configuration๋ ์งํํ์๋๋ฐ ์ด์ ๋ ํ๋์ window ๊ฐ์ฒด๋ง ๊ด๋ฆฌํ์ง ๋ชปํ๋ค.
- ๋ฐ๋ผ์ appdelegate์ ์ผ๋ถ ์ญํ ์ SceneDelegate์ ๋๊ฒจ ์ฃผ์๊ณ , AppDelegate๋ ์๋ก์ด ์ญํ ํ๋๋ฅผ ๋ ๋งก๊ฒ ๋์๋ค.
- process level์ ์ด๋ฒคํธ ๋ฐ์์ ์๋ ค์ฃผ๊ณ (๊ทธ๋๋ก)
- session life-cycledmf appDelegate์ ์๋ ค์ฃผ๊ฒ ๋์์ (์ ๊ท)
- ๊ธฐ์กด UI ์ํ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ์ SceneDelegate์์ ์ฑ ์์ง๊ฒ ๋์๊ณ , AppDelegate๋ ์๋ก์ด Scene Session์ด ์์ฑ๋๊ฑฐ๋ ๋ฒ๋ ค์ง ๋ ์๋ฆฌ๋ ์ญํ ์ ์๋ก ๋งก๊ฒ ๋์๋ค.
-
scene(_: willConnectTo: options:) sceneWillEnterForeground(_ :) sceneDidBecomeActive(_ :) sceneWillResignActive(_ :) sceneDidEnterBackground(_ :) sceneDidDisconnect(_ :) // iOS 12์ด์ applicationWillResignActive // active -> inactive ์ํ๋ก ์ ํ์ inactive์ ํ ์ง์ ์คํ applicationDidEnterBackground // background ์ํ์ ํ ์งํ applicationWillEnterForeground // background -> foreground ์ํ๋ก ์ ํ์ foreground์ง์ applicationDidBecomeActive // active์ํ์งํ, ํ๋ฉด์ผ๋ก ๋์์ฌ ๋๋ง๋ค ์คํ applicationWillTerminate // ์ฑ ์ข ๋ฃ์ willFinishLaunching // didFinish์ ์ ํธ์ถ๋๋ ํจ์ didFinishLaunching // ์ฑ ์คํ์ 1๋ฒ๋ง ์คํ๋๋ ํจ์
- (์ฐธ๊ณ ) https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/4
- (์ฐธ๊ณ ) https://sueaty.tistory.com/135
- ์ฑ์ด In-Active ์ํ๊ฐ ๋๋ ์๋๋ฆฌ์ค๋ฅผ ์ค๋ช
ํ์์ค.
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ ์ ๋จธ๋ฌด๋ ์ํฉ์ด๋, ์ฑ์ด ๋ก๋ฉ๋๋ ์ํ ๋ฑ
- scene delegate์ ๋ํด ์ค๋ช
ํ์์ค.
- iOS 13์ด์์์ ์ฑ์๋ ๋ ์ด์์ scene์ด ์์ ์ ์์ผ๋ฉฐ, iOS, iPadOS ๋ฑ์์ ๋ค์ค ์ฐฝ ์ฑ์ ๋น๋ํ ์ ์๋ค. ๊ธฐ์กด AppDelegate์ ์๋ UI ์ํ ๋ณํ๋ฅผ ๋ด๋นํ๋ ๋ฉ์๋๊ฐ SceneDelegate๋ก ์ด์ ๋์์ต๋๋ค.
- (์ฐธ๊ณ ) https://github.com/lunchScreen/Interview_Questions/issues/41
- UIApplication ๊ฐ์ฒด์ ์ปจํธ๋กค๋ฌ ์ญํ ์ ์ด๋์ ๊ตฌํํด์ผ ํ๋๊ฐ?
- AppDelegate์ ๊ตฌํํ์ฌ์ผ ํ๋ค. UIApplication์ ์ฑ๊ธํค ๋ฐฉ์์ ํตํด ์ ๊ทผํ์ง๋ง, ๋ณ๋๋ก ์์ฑํ ๊ฒฝ์ฐ ๋ฐํ์์์ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
- (์ฐธ๊ณ ) https://min-mon.tistory.com/entry/UIKit-UIApplication
- App์ Not running, Inactive, Active, Background, Suspended์ ๋ํด ์ค๋ช
ํ์์ค.
- Not running : ์ฑ์ด ์คํ๋์ง ์์ ์ํ
- foreground : app์ด ์คํ๋๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๊ณ ์๋ ์ํ
- inactive : ์ฑ์ด ์คํ์ค์ด๋, ์์ง ์๋ฌด๋ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ง ์์ ์ํ. foreground์์ ์ ํ๋ ์ ๊ธ ๋ฉํฐํ์คํน ์คํฌ๋ฆฐ ๋ฑ์์ inactive์ํ๋ฅผ ๊ฐ์ง
- active : ์ฑ์ด ์คํ์ค์ด๋ฉฐ, ํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ณ ์๊ณ , ๋ฐ์ํ ์ํ.
- background : ์ฑ์ด ๋ฐฑ๊ทธ๋๋๋์ ์๋ ์ํ๋ฉฐ, ์ฌ์ ํ ์คํ๋๊ณ ์๋ ์ฝ๋๊ฐ ์๋ ์ํ.
- suspend : ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๊ณ ์คํ๋๋ ์ฝ๋๊ฐ ์๋ ์ํ.(app์ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ฉฐ, ์์คํ๋๊ฐ ๋ ๋น์์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์์ง๋ง, cpu๋ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ชจํ์ง ์๊ณ , ์ธ์ ๋ ์ง ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ๋ฑ์ ์ด์ ๋ก ์ข ๋ฃ ๊ฐ๋ฅ)
- NSOperationQueue ์ GCD Queue ์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
- iOS ๋ฉํฐ ์ค๋ ๋ฉ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด 2๊ฐ์ง๊ฐ ์๋ค.
- GCD(Grand Central Dispatch)๋ C๊ธฐ๋ฐ์ low-level API
- NSOperation์ Obj-c๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง high-level API
- ๊ฐ์ฒด์ ์ฐ์ ์์ ๋ฐ ์ค๋น ์ํ์ ๋ฐ๋ผ ๋๊ธฐ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์คํํ๋ค. Operation Queue์ ์ถ๊ฐ๋ ์๊ฒ ใ ์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ์ด์ ๋จ์ ์๋ค. ์์ ์ด ์ถ๊ฐ๋ ํ์๋ ๋๊ธฐ์ด์์ ์ง์ ์ ๊ฑฐํ ์ ์๋ค.
- ๋ชจ๋ ์์ ์ด ๋๋์ง ์์ ์ํ์์ Operation Queue๋ฅผ ์ค์ง์ํค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฆญ์ด ๋ฐ์ํ ์๋ ์๋ค.
- GCD์์๋ ํ ์ ์๋ ๊ธฐ๋ฅ๋ค(์ฌ๊ฐ, ์ทจ์, ์ค์ง)์ ์ ๊ณตํ์ง๋ง ๊ตฌํ์ด ๋ณต์กํ๊ณ ๋ฌด๊ฒ๋ค.
- KVO(Key-Value Observing) ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. (GCD๋ ์ฌ์ฉ ๋ถ๊ฐ)
- operation (read only) : ํ์ฌ ํ์ ์๋ ์์ ์ ๊ฐฏ์
- operationCount (read only) : ํ์ฌ ํ์ ์๋ ์์ ์ ๊ฐฏ์
- maxConcurrentOperationCount (readable and writable) : ํ์์ ๋์์ ์คํํ ์ ์๋ ์์ ์ ์ต๋ ๊ฐฏ์
- suspended (readable and writable) : ์คํ ์์ ์ ์ ๊ทน์ ์ผ๋ก ์ค์ผ์ค๋งํ๊ณ ์๋์ง ์ฌ๋ถ์ ๋ํ Boolean ๊ฐ
- name (readable and writable) : operationQueue์ ์ด๋ฆ
- ์์ ๊ฐ์ ์์กด์ฑ : ์ด๋ค ์์ ์ ๋ค๋ฅธ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํ์ ์คํํ ์ ์๊ฒ ํ๋ ์์ ์ ๊ณ์ธต์ ๋ง๋ค ์ ์๋ค.
- GCD(Grand Central Dispatch) Queue(Dispatch Queue)
- ๋์์ฑ ๋ชจ๋ธ์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์๋ low-level C๊ธฐ๋ฐ์ API
- ์ฑ์ ๋ฉ์ธ ์ค๋ ๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์์ ์ ์คํ์ ์ง๋ ฌ ๋๋ ๋์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.
- ์์
ํญ๋ชฉ์ ๋๊ธฐ ํน์ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฝํ๋ค.
- ๋๊ธฐ์ : ์ฌ๋ฌ๊ฐ์ง ์์ ์ ์์ฐจ๋ก ์คํํ๋ค.
- ๋น๋๊ธฐ์ : ๋ชจ๋ ๋๊ธฐ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ์ ์ถ๊ฐ ์ค๋ ๋์ ์์ ์ ๋น๋๊ธฐ๋ก ์คํํด์ ์์ ์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํํ๋ ๋ฐฉ์์ด๋ค.
- ๋ฉ์ธ ํ์์ ์์ ํญ๋ชฉ์ ๋๊ธฐ์ ์ผ๋ก ์คํํ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
- (์ฐธ๊ณ ) https://thoonk.tistory.com/30
- GCD API ๋์ ๋ฐฉ์๊ณผ ํ์์ฑ์ ๋ํด ์ค๋ช
ํ์์ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฉด์ ๋์์ ์ผ๋ก ์์ ์ ์คํ์ํค๋ low-level ๊ธฐ๋ฐ์ API
- ์ฑ์ ์คํํ๋ฉด ์์คํ
์ด ์๋์ผ๋ก ๋ฉ์ธ์ค๋ ๋ ์์์ ๋์ํ๋ Main ํ(Serial Queue)๋ฅผ ๋ง๋ค์ด์ ์์
์ ์ํํจ. ๊ทธ ์ธ์ ์ฌ๋ฌ๊ฐ์ Global ํ(Concurrent Queue)๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ง๋ค์ด์ ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
- Dispatch Queue : FIFO ์์๋ก ์์ ์ ์คํ์ํค๋ ์ญํ ์ ๋ด๋น
- Serial Dispatch Queue: ํ๋ฒ์ ํ ์์ ๋ง ์คํ์ํจ๋ค.
- Concurrent Dispatch Queue: ์์ํ ์์ ์ด ๋๋๋๊ฒ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๊ฐ๋ฅํ ๋ง์ ์์ ์ ์คํ์ํจ๋ค.
- Main Dispatch Queue, ์ฑ์ ๋ฉ์ธ ์ค๋ ๋์์ ์์ ์ ์คํํ ์์๋ ์ ์ญ์์ ์ฌ์ฉ๊ฐ๋ฅํ ์๋ฆฌ์ผ ํ
- DispatchQueue.main: main thread queue, serial Queue๋ก ๋์ํ๋ค
- ํ์์ฑ : GCD ์ฌ์ฉ ์ด์ ์๋ ๋ฉํฐ ์ค๋ ๋ฉ ์ฌ์ฉ์ ์ํด์ ์ค๋ ๋์ OperationQueue ๋ฑ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ์ค๋ ๋์ ๊ฒฝ์ฐ์๋ ๋ณต์กํ๊ณ ciritical sction์ ์ด์ฉํ lock์ฒ๋ฆฌ๊ฐ ๋ถํธํ๋ค. OperationQueue๋ ๋ฌด๊ฒ๊ณ boilerplate ์ฝ๋๋ค์ด ๋ง์ด ํ์ํ ๋ฌธ์ ๊ฐ ์์๋ค. Apple์์ ์ ๊ณตํ๋ GCD๋ฅผ ํตํด ์ค๋ ๋ ๊ด๋ฆฌ๋ฅผ ์ฑ๋ ๋ฒจ์์ OS๋ ๋ฒจ๋ก ์ฌ๋ ธ๋ค.
- ๋ํ, ๋คํธ์ํฌ ์์ ์ฒ๋ผ ํค๋นํ ์์ ์ ํ ๋, GCD๋ฅผ ์ ์ ํ ์ด์ฉํ๋ค๋ฉด ์ฑ์ ๋ ํจ์จ์ ์ผ๋ก ์ค๊ณํ ์ ์๋ค.
- Global DispatchQueue ์ Qos ์๋ ์ด๋ค ์ข
๋ฅ๊ฐ ์๋์ง, ๊ฐ๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ค๋ช
ํ์์ค.
- userInteractive : ์ฌ์ฉ์ ํฐ์น์ ๊ฐ์ด ์ ์ผ ๊ธํ๊ฑฐ
- userInitiated : ์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ด๊ฒ๋ ๊ฑฐ์ ๋ฐ๋ก ์ํ๋์ด์ผ ํ ์์
- default : ์์ ๋ ๋ฒจ๋ณด๋ค ์กฐ๊ธ ๋ ์ค์ํ ์์
- utility : ์์ด~ ์๋ถ ๊ฑธ๋ฆฌ๋ ๋๋ฆ ๋ฌด๊ฑฐ์ด ์์ ex) ๋คํธ์ํฌ ๋ฐ ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
- background : ์ฌ์ฉ์์๊ฒ ๋ฐ๋ก ์ธ์๋ ํ์๋ ์๋ ์์ ex) ๋ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ค์ด ๋ฐ๊ธฐ, ์ฉ๋์ด ํฐ ์์์ ๋ฐ๊ธฐ, ์ฌ์ฉ์์ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ธฐ
- iOS ์ฑ์ ๋ง๋ค๊ณ , User Interface๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ํ์์ ์ธ ํ๋ ์์ํฌ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ?
- UIKit์ ๋๋ค.
- UIKit์ด๋ ์ฌ์ฉ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋๊ฒ ์ฃผ ๋ชฉ์ ์ธ ํ๋ ์์ํฌ์ ๋๋ค.
- (์ฐธ๊ณ ) https://www.notion.so/iOS-User-Interface-b8014e53472e400ea4718cf750c1d833
- Foundation Kit์ ๋ฌด์์ด๊ณ ํฌํจ๋์ด ์๋ ํด๋์ค๋ค์ ์ด๋ค ๊ฒ์ด ์๋์ง ์ค๋ช
ํ์์ค.
- Foundation ํ๋ ์์ํฌ๋, ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ง์์ฑ, ํ ์คํธ ์ฒ๋ฆฌ, ๋ ์ง ๋ฐ ์๊ฐ ๊ณ์ฐ, ์ ๋ ฌ ๋ฐ ํํฐ๋ง, ๋คํธ์ํน์ ํฌํจํ์ฌ ์ฑ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ํ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ๊ณ์ธต์ ์ ๊ณตํ๋ค. ์ฝ์ฝ์ ํฐ์น ํ๋ ์์ํฌ์ ํฌํจ๋ ํ๋ ์์ํฌ์ด๋ฉฐ ์ ํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ํ๋ ์์ํฌ.
- ์์ ์ค๋ช ์์ ๋งํ๋ ๊ฒ๋ค์ด class๋ก ์์ผ๋ฉฐ, import Foundation์์ Foundation์ ๋ด๋ถ๋ฅผ ์ด์ด๋ณด๋ฉด open class๋ก ์ ์ ๊ฒ๋ค์ด ํฌํจ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- (์ฐธ๊ณ ) https://developer.apple.com/documentation/foundation
- Delegate๋ ๋ฌด์ธ์ธ๊ฐ ์ค๋ช
ํ๊ณ , retain ๋๋์ง ์๋๋์ง ๊ทธ ์ด์ ๋ฅผ ํจ๊ป ์ค๋ช
ํ์์ค.
- delegate๋ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ฒ๋ฆฌํด์ผํ ์ผ ์ค ์ผ๋ถ๋ฅผ ์ํจํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ๋๊ฒ ์๋๋ผ ๋ถ์ฐํ๊ฒ ๋๋๋ฐ, ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋๊น์ผ๋ก์จ ์ค์ํ ์ญํ ์ ํจ. ๊ธฐ๋ฅ์ ์์ํ์ฌ, ์ง์ ๊ตฌํํด์ผ ํ๋ ๋ถ๋ถ์ด ์ ์ด์ง. UITableViewDelegate, UITableViewDataSources ๋ฑ๋ delegate๋ฅผ ํ์ฉํ ๊ฒ ์ค์ ์ผ๋ถ.
- ratain์ด ๋น์ฐํ ์ผ์ด๋จ. (์ด๊ฑธ๋ก ์์ ์ ๊ฐ๋ฐํ๋ค๊ฐ ์ด์ ๋ฐ์ํด์ ์์ฒญ ใ ํ ;) delegate๋ฅผ ๊ฐ์ฒด๋ก ํ์ฉํด ์ฌ์ฉํ๋ ค๋ฉด, weak์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ๋ํ, A-B์ delegate ๋ณ์๋ฅผ ๋ค๊ณ ์๊ณ , B-A๋ฅผ ๋ ๋ค๊ณ ์๋ค๋ฉด ์์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
- NotificationCenter ๋์ ๋ฐฉ์๊ณผ ํ์ฉ ๋ฐฉ์์ ๋ํด ์ค๋ช
ํ์์ค.
- Notification: ์๋ฆผ ์ผํฐ๋ฅผ ํตํด ๋ฑ๋ก๋ ๋ชจ๋ ๊ด์ฐฐ์์๊ฒ broadcast๋๋ ์ ๋ณด ์ปจํ ์ด๋
- NotificationCenter: ๋ฑ๋ก๋ ๋ชจ๋ Observaer์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฉ์ปค๋์ฆ
- Key: Value๋ก ๊ตฌ์ฑ๋์ด ๋์ํ๋ค.
- ๋์ ๋ฐฉ์
- ์ต์ ๋ฒ๋ฅผ ๋ฑ๋กํฉ๋๋ค.
- ์์คํ ์์ ๋ฑ๋ก๋ ์ต์ ๋ฒ๋ฅผ ๊ฐ์ํ๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ๋ฑ๋กํ ๊ฐ์ฒด์๊ฒ ํต์งํฉ๋๋ค.
- ํ์ฉ ๋ฐฉ์
- ํ๋ฉด์ ๊ฐ๋ก์ธ๋ก ์ ํ, ๋ฐ์ดํฐ์ ๋ณํ์ด ์ผ์ด๋ฌ์ ๋
- UIKit ํด๋์ค๋ค์ ๋ค๋ฃฐ ๋ ๊ผญ ์ฒ๋ฆฌํด์ผํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ฐ๋ ๋ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ?
- ๋ฉ์ธ ์ค๋ ๋์ด๋ค. (UI๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์์๋ ๋ฉ์ธ์์!! ๊ทธ ์ด์ ๋ ๊ทธ๋ ๊ฒ ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์)
- UIKit์ Thread-Safeํ์ง ์๊ธฐ ๋๋ฌธ์
- UIKit์ ๋๋ถ๋ถ์ ์์๋ค์ nonatomic์ด๋ค. ์ฆ, Thread-Safeํ์ง ์๋ค. UIKit์ด๋ ๊ฑฐ๋ํ framework๋ฅผ Thread-Safeํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋นํ์ค์ ์ด๋ฉฐ, Thread-Safe์ผ๋ก ๋ง๋๋ ค๋ฉด atomic์ผ๋ก ํ๊ฑฐ๋ NSLock ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค. ์ด๋ฌํ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ฉด ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Serialํ๊ฒ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ์ด๋ฐ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ UI๋ Main Thread์์ Syncํ๊ฒ ๋์ํ๋ค.
- ๋๋ฒ์จฐ๋ iOS์ Graphics rendering์ด ๊ถ๊ทน์ ์ผ๋ก ๋๊ธฐ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋๋ก์ด๋๋ฅผ ํ์ตํ ๋, ํ๊ต ๊ต์๋๊ป์ UI์์ ๋งค์ฐ ์์ธํ๊ฒ ์ค๋ช ํด ์ฃผ์ จ๋๋ฐ, ์ด๋ฒคํธ ๋ฃจํ ๋ฌดํํ ๋๋ฉด์ ์ฌ์ฉ์์ ์ธ์ ๋ค์ด์ฌ ์ง ๋ชจ๋ฅด๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทผ๋ฐ ์ด๋ฒคํธ ๋ฃจํ ๋ง๊ณ ๋ ๋ชจ๋ ๋ฉ์ธํด์ ํ๋ฉด ์ฌ์ฉ์์ ์ด๋ฒคํธ๋ฅผ ๋์น ์๋ ์๊ณ , ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ์์ด์ ๋ฉ์ธ์ด ์๋๋ผ ์ฌ๋ฌ ์ค๋ ๋๋ก ๋ถ๋ฆฌํ๋ ๊ธฐ์ ๋ ์ด ๋๋ฌธ์ ์กด์ฌํ๋ค.
- (์ฐธ๊ณ ) https://medium.com/remember/%EC%99%9C-ui-%EC%B2%98%EB%A6%AC%EB%A5%BC-main-thread%EC%97%90%EC%84%9C-%ED%95%B4%EC%95%BC%ED%95%98%EB%82%98-5b2ba268f4eb
- App Bundle์ ๊ตฌ์กฐ์ ์ญํ ์ ๋ํด ์ค๋ช
ํ์์ค.
- ์ ํ ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์คํ ๊ฐ๋ฅํ ์ฝ๋์ ๋ฆฌ์์ค ๋ฑ์ ํ ๊ณต๊ฐ์ ๋ฌถ๋ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ์ด๋ค.
- ์ฆ, ๋ฒ๋ค์ด๋ ์คํ ๊ฐ๋ฅํ ์ฝ๋์ ์ฝ๋์ ์ํด ์ฌ์ฉ๋๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ standardized, hierarchical ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ด๋ค.
- App Bundle ํ์ผ์ ์ ํ
- Info.plist (ํ์) : ์์ฉ ํ๋ก๊ธ๋งค์ ๋ํ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐํ๋ ํ์ผ. SwiftUI๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๊ธฐ์ Info.plistํ์ผ์ด ๋์ ๋ณด์ด๊ฒ ๋ง๋ค์ด์ง์ง ์๋๋ค. ์ถํ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ฉฐ, ์๋ณด์ด๋ ์ ๋ณด๋ ํ๋ก์ ํธ ๊ทธ ํด๋ ์ชฝ์ ์๋ค.
- Excutable (ํ์) : ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ์คํ ๊ฐ๋ฅํ ํ์ผ์ด ์์ด์ผ ํ๋ค. ์ฑ์ ๊ธฐ๋ณธ ์ง์ ์ ๊ณผ ์ฑ์ ๋์์ ์ ์ ์ผ๋ก ๋งํฌ๋ ๋ชจ๋ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์.
- Resource files : ์ผ๋ฐ์ ์ผ๋ก ์ฑ์ ์ด๋ฏธ์ง, ์ฌ์ด๋, nibํ์ผ, ๋ฌธ์์ด ํ์ผ ๋ฑ์ด ์์นํ๋ค. ๋๋ถ๋ถ์ ๋ฆฌ์์ค ํ์ผ์ ํน์ ์ธ์ด ๋๋ ์ง์ญ์ ๋ํ์ฌ ํ์งํํ๊ฑฐ๋ ๋ชจ๋ ์ง์ญ์์ ๊ณต์ ํ ์ ์์.
- Other support files : iOS ์ฑ ๋ฒ๋ค์ ์ฌ์ฉ์ ์ ์ ํ๋ ์์ํฌ ๋๋ ํ๋ฌ๊ทธ์ธ์ ํฌํจํ ์ ์์.
- iOS App Bundle ํ์ผ์ ๊ตฌ์กฐ
- MyApp (ํ์) : ์ฑ์ ์ฝ๋๋ฅผ ํฌํจํ๋ ์คํ ํ์ผ
- ์์ฉ ํ๋ก๊ทธ๋จ ์์ด์ฝ (ํ์/๊ถ์ฅ)
- Info.plist (ํ์) : ๋ฒ๋ค ID, ๋ฒ์ ๋ฒํธ ๋ฐ ์ฑ ํ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์์ฉ ํ๋ก๊ธ๋งค์ ๊ถ์ฑ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์.
- Launch Image (๊ถ์ฅ)
- MainWindow.nib (๊ถ์ฅ)
- Settings.bundle : ์ค์ ์ฑ์ ์ถ๊ฐํ๋ ค๋ ์ฑ ๋ณ ํ๊ฒฝ ์ค์ ์ ํฌํจํ๋ ํน์ ์ ํ์ ํ๋ฌ๊ทธ์ธ
- ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ํ์ผ : ์ง์ญํ๋์ง ์์ ๋ฆฌ์์ค๋ ์ต์์ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์น๋๊ณ , ์ง์ญํ๋ ๋ฆฌ์์ค๋ ์ฑ ๋ฒ๋ค์ ์ธ์ด๋ณ ํ์ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์น (๋จ, iOS App Bundle์ 'Resource' ๋ผ๋ ์ฌ์ฉ์ ์ง์ ํด๋๋ฅผ ํฌํจํ ์ ์์.)
- (์ฐธ๊ณ ) https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/AppBundle.md
- (์ฐธ๊ณ ) https://sihyungyou.github.io/iOS-app-bundle/
- ๋ชจ๋ View Controller ๊ฐ์ฒด์ ์์ ํด๋์ค๋ ๋ฌด์์ด๊ณ ๊ทธ ์ญํ ์ ๋ฌด์์ธ๊ฐ?
- UIViewController๋ฅผ ์์๋ฐ์ต๋๋ค.
- ์ญํ ์ ๋ทฐ์ ์ฌ์ฉ์์ ์ํธ์์ฉ์ ์๋ตํ๋ฉฐ, ๊ธฐ๋ณธ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๋ํ ์๋ต์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ์ฑ์์ ๋ค๋ฅธ ViewController๋ฅผ ํฌํจํ ๋ค๋ฅธ ๊ฐ์ฒด์ ์กฐ์ ํฉ๋๋ค. ๋ทฐ ํฌ๊ธฐ ์กฐ์ ๋ฐ ์ ์ฒด ์ธํฐํ์ด์ค์ ๋ ์ด์์์ ๊ด๋ฆฌํฉ๋๋ค.
- ์์ ๋ง์ Custom View๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋์ง ์ค๋ช
ํ์์ค.
- xib๋ฅผ ์ด์ฉํ์ฌ ๋ง๋ค ์๋ ์์ผ๋, ๊ฐ์ธ์ ์ผ๋ก ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ์์ ์ถฉ๋์ด๋ ์๋ ๋ฑ ๋ถํธํ ์ ์ด ๋๋ฌด ๋ง์์ ์์ ์ฌ์ฉํ์ง ์๊ณ , ๋๋ ์ฃผ๋ก ์ฝ๋๋ก ๊ฐ๋ฐ์ ์งํํ๋ฏ๋ก ์ฝ๋๋ก Custom View๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋ํด์ ์ด์ผ๊ธฐ ํ ๊ฒ์.
- ๊ทธ๋ฅ UIView ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฌ์ฉํ๊ณ ์ ํ๋ ์ชฝ์ UIViewController์ ์ปค์คํ ๋ทฐ(UIView)์ ํ๋ ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ฃผ๊ณ addSubView๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
- ๊ทธ๋ฅ ๋ด๊ฐ ํ์์ MVVM์ผ๋ก ๊ฐ๋ฐํ ๋, View๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ปค์คํ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
- View ๊ฐ์ฒด์ ๋ํด ์ค๋ช
ํ์์ค.
- UI์ ๊ธฐ๋ณธ๊ตฌ์ฑ ์์์ด๋ค. ํ๋ฉด์ ์ง์ฌ๊ฐํ ์์ญ์ ๋ํ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ชจ๋ ๋ทฐ์ ๊ณตํต์ ์ธ ๋์์ ์ ์ํ๋ค. ๋ชจ๋ ๋ทฐ ํด๋์ค์ ์์ ํด๋์ค๋ค. ๋ชจ๋ ์กฐ์์ main thread์์ ํด์ผํ๋ค. ์ ์ ์์ ์ํธ์์ฉ์ ๋ด๋นํ๋ค.
- UIView ์์ Layer ๊ฐ์ฒด๋ ๋ฌด์์ด๊ณ ์ด๋ค ์ญํ ์ ๋ด๋นํ๋์ง ์ค๋ช
ํ์์ค.
- Layer๋ ๋ทฐ์ ๋ ๋๋ง์ ์ํ์ฌ ๋ทฐ์ ์ํด ๋ทฐ๋ฅผ ์ง์ํด์ฃผ๋ CroeAnimation ๊ณ์ธต์ด๋ค. Layer๋ ๋ทฐ์ ์ปจํ ์ธ ์ ์ ๋๋ฉ์ด์ ์ ๋ด๋นํ๋ค. UIView๋ ๊ฐ์ฒด์ ๋ํ๋๋ ์ปจํ ์ธ ์ layer๋ฅผ ๊ฐ๊ณ ์๊ณ , UIView๋ ์ด๋ฏธ์ง๋ ์ ๋๋ฉ์ด์ ๋ค์ ์ง์ ์ ์ดํ์ง ์๊ณ , View์๊ฒ ์์ ์ ์ฃผ๋ฉด VIew ๋ด๋ถ์ Layer๊ฐ์ฒด์์ ์ง์ ์ํ์ ํ๋ค.
- UIView๋ CALayer๊ฐ์ฒด๋ฅผ ๋ํํ๊ณ ์๋ค.
- UIWindow ๊ฐ์ฒด์ ์ญํ ์ ๋ฌด์์ธ๊ฐ?
- UIView๋ UIWindow์ ๋ถ๋ชจ์ด๋ค.
- UIWindow๋ UI์ backdrop(๋ฐฐ๊ฒฝ)์ ์ ๊ณตํ๊ณ , ์ค์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ํ๋(behaviors)์ ์ ๊ณตํ๋ ๊ฐ์ฒด์ด๋ค.
- Window๋ ์์ ์ ์๊ฐ์ ๋ชจ์ต์ ๊ฐ๊ณ ์์ง๋ ์์ง๋ง, ์ฑ View์ ํ๋ ์ ํ ์ด์ ์ ์ค์ํ๋ค. ์คํฌ๋ฆฐ์ ๋ํ๋๋ ๋ชจ๋ View๋ Window๋ก ๋ฌถ์ฌ ์์ผ๋ฉฐ, ๊ฐ Window๋ ์ฑ์ ๋ค๋ฅธ View์ ๋ ๋ฆฝ์ ์ด๋ค. ์ฑ์์ ๋ฐ์ ์ด๋ฒคํธ๋ ํด๋น View๊ฐ์ฒด๋ก ๋ผ์ฐํ ๋๊ณ , ํด๋น ์ด๋ฒคํธ๋ ํด๋น View๋ก ์ ๋ฌ๋๋ค.
- Windows๋ ์ฑ์ ๊ธฐ๋ณธ์์์ด์ง๋ง, ์ฝ๋์์ ์ต์ํ์ ๋ฐฉ์์ผ๋ก ์ํธ์์ฉํ๋ค.
- UIKit์ ๋๋ถ๋ถ์ Window๊ด๋ จ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ, ๋ง์ ์ฑ์ ํ๋(behaviors)์ ๊ตฌํํ๋ค.
- (์ ๋ฆฌ)
- ์ญํ : ์ฑ์ ์๊ฐ์ ์ฝํ ์ธ ๋ฅผ ๋ด์ผ๋ฉฐ, ๋ทฐ๋ค๊ณผ ๋ค๋ฅธ ์ฑ ๊ฐ์ฒด๋ค์๊ฒ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค. ์ค๋ฆฌ์ํ ์ด์ ๋ณํ๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ฑ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค๊ณผ ํ๋ ฅํ๋ค.
- (์ฐธ๊ณ ) https://zeddios.tistory.com/283
- UINavigationController ์ ์ญํ ์ด ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค.
- UINavigationController๋ ๋ค๋น๊ฒ์ด์ ์คํ์ ์ฌ์ฉํ์ฌ, ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค. LIFO ๋ฐฉ์์ผ๋ก ๋ค๋น๊ฒ์ด์ ๋ฐ๋ฅผ ํตํด ๋ทฐ๋ฅผ ์ด๋ํ ๋, ์คํ ๊ตฌ์กฐ๋ก ์์ธ๋ค.
- TableView๋ฅผ ๋์ ๋ฐฉ์๊ณผ ํ๋ฉด์ Cell์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ต์ํ ๊ตฌํํด์ผ ํ๋ DataSource ๋ฉ์๋๋ฅผ ์ค๋ช
ํ์์ค.
-
// ์น์ ์ ํ์ํ ํ์ ๊ฐ์ @available(ios 2.0, *) func tableview(_ tableView: UITableView, numberOfRowInSection section : Int) -> Int @available(ios 2.0, *) // ํน์ ์์น์ ํ์ํ ์ ์ ์์ฒญํ๋ ๋ฉ์๋ func tableview(_ tableView: UITableView, cellForRowAt indexPath : IndexPath) -> UITableViewCell
- ๋์ ๋ฐฉ์
- ์ฒ์ ์ ์ด awakeFromNib()๋ก ํธ์ถ, ํ๋ฉด์ ๋ชจ๋ ํญ๋ชฉ์ tableView(_:prefetchRowsAt:indexPath:)๋ก ํตํด ํธ์ถ ํ๋ฆฌํจ์น ํ๋ฉด์ด 10๊ฐ ์ด์ ํธ์ถ๋๋ค. ๋ค์์ผ๋ก๋ cellForRow๋ฅผ ํธ์ถ willDisplay ํธ์ถ prepareForReuse ํธ์ถ
-
- ํ๋์ ViewController ์ฝ๋์์ ์ฌ๋ฌ TableViewController ์ญํ ์ ํด์ผ ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๊ตฌ๋ถํด์ ๊ตฌํํด์ผ ํ๋์ง ์ค๋ช
ํ์์ค.
- ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ปค์คํ ํ ์ด๋ธ ๋ทฐ๋ฅผ identifer๋ฅผ ํตํด์ delegate ๋ฐ dataSource ๋ถ๋ถ์์ if๋ฌธ ํน์ switch๋ฅผ ํตํด์ ํ ์ด๋ธ ๋ทฐ์ ์์ด๋๋ ํ๊ทธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ๊ตฌํํด์ค๋ค.
- setNeedsLayout์ setNeedsDisplay์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํ์์ค.
- (์ ๋ฆฌ) setNeedsLayout()๋ฉ์๋์ setNeedsDisplay() ๋ฉ์๋ ๋ชจ๋ ํธ์ถ ์ฆ์ ์คํ๋์ง ์๊ณ , ๋ค์ update cycle์ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋๋ค. setNeedsLayout์ layoutSubview ๋ฉ์๋๋ฅผ setNeedsDisplay๋ draw ๋ฉ์๋๋ฅผ ์์คํ ์ด ํธ์ถํ๊ฒ๋ ์ ๋ํ๋ค. setNeedsLayout() ๋ฉ์๋๋ ๋ชจ๋ ํธ๋ค๋ฌ๊ฐ ์ข ๋ฃ๋๊ณ ๊ถํ์ด main run loop๋ก ๋์์ค๋ ์์ ์ view์ position์ด๋ layout์ ๊ดํ ๋ฉดํ๋ฅผ ์ ์ฉ์ํค๊ณ setNeedsDisplay() ๋ฉ์๋๋ ๋ค์ ๋๋ก์ ์ฌ์ดํด์ด ์ค๋ฉด ๊ทธ๋ ์์ฌ์๋ ๊ทธ๋ ค์ผ ํ ์ปจํ ์ธ ๋ค์ ๋์์ ์ ์ฉ ์ํต๋๋ค.
- (์ฐธ๊ณ ) https://jeongupark-study-house.tistory.com/165
- (์ฐธ๊ณ ) https://velog.io/@zeke/difference-between-setNeedsLayoutsetNeedsDisplay
- NSCache์ ๋์
๋๋ฆฌ๋ก ์บ์๋ฅผ ๊ตฌ์ฑํ์๋์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ์์ค.
- ์บ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ๋ ๊ณ ์ฉ๋, ๊ณ ํ์ง ์ด๋ฏธ์ง๋ฅผ ๊ณ์ํด์ ๋ค์ด๋ก๋ ํ๋ฉด ์ฌ์ฉ์์ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ์๋ชจํ๊ณ , ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋๋ฐ๊น์ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋์ ๋ค์ด ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์บ์ฑํด์ ์ ์ฅํด๋๊ณ ๊ทธ ์ด๋ฏธ์ง๊ฐ ์ฌ์ฉ๋๋ฉด ๋ฆฌ์์ค ์๋ชจ ์์ด ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์๋ค.
- NSCache: ์ ์ฅ ์ปจํ ์ด๋๋ก ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ ๋ ์ ๊ฑฐ๋ ์ ์๋ Key-Value ์์ ์ ์ฅ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ค. ๋ค๋ฅธ ์ฑ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋์ผ๋ก ์บ์๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
- ์ฐจ์ด์
- NSDictionary๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๋ ์์คํ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์ ๋, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ์์ฑํด์ผ ํ์ง๋ง, NSCache๋ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค. NSCache๋ Thread-Safeํ๋ฉฐ NSDictionary๋ Thread-safe ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์ ๊ทผํ ๋ ๋ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. NSCache๋ Key๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ์ ์งํ๋ค.
- ์บ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ๋ ๊ณ ์ฉ๋, ๊ณ ํ์ง ์ด๋ฏธ์ง๋ฅผ ๊ณ์ํด์ ๋ค์ด๋ก๋ ํ๋ฉด ์ฌ์ฉ์์ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ์๋ชจํ๊ณ , ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋๋ฐ๊น์ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋์ ๋ค์ด ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์บ์ฑํด์ ์ ์ฅํด๋๊ณ ๊ทธ ์ด๋ฏธ์ง๊ฐ ์ฌ์ฉ๋๋ฉด ๋ฆฌ์์ค ์๋ชจ ์์ด ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์๋ค.
- URLSession์ ๋ํด์ ์ค๋ช
ํ์์ค.
- URLSession์ iOS์์ ์ ๊ณตํ๋ HTTP๋ฅผ ์ด์ฉํ ๋คํธ์ํน์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ๋์์ฃผ๋ API๋ฅผ ์ ๊ณตํ๋ ํด๋์ค์ด๋ค. URLSession์ Thread-Saftyํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ค๋ ๋์์๋ ์์ ๋กญ๊ฒ Session๊ณผ Task๋ฅผ ์์ฑํ ์ ์ด์ฟ.
- URLSession์ URLSessionConfiguartion์ ํตํด์ ์์ฑํ ์ ์๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ์ธ์ ์ ํ๊ฐ ์ด์์ URLSessionTask๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ํตํด์ฌ ์ค์ ๋ก ์๋ฒ์ ํต์ ํ ์ ์๋ค.
- URLSessionConfiguration์ ์๋์ ์ธ๊ฐ์ง ํ์
์ผ๋ก ๋ง๋ค ์ ์๋ค.
- Default : ๊ธฐ๋ณธ์ ์ธ ๋คํธ์ํน ์ ์ฑ ์ ์ฌ์ฉํ๋ค.
- Ephemeral : ์ฟ ํค์ ์บ์๋ฅผ ์ ์ฅํ์ง ์์ ๋ ์ฌ์ฉํ๋ค.
- Background : ์ฑ์ด background์ ์์ ๋ ์ปจํ ์ธ ๋ฅผ ๋ค์ด๋ก๋ ํน์ ์ ๋ก๋ํ ๋ ์ฌ์ฉํ๋ค.
- URLSessionTask ๋ํ ์์
์ ๋ฐ๋ผ ์ธ๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
- URLSessionTaskDataTask : ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์์ ์ํ ์ ์ฌ์ฉํ๋ค.
- URLSessionTaskUploadTask : ๋ฐ์ดํฐ ์ ๋ก๋ ์ ์ฌ์ฉํ๋ค.
- URLSessionTaskDownloadTask : ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ์ ์ฌ์ฉํ๋ค.
- (์ฐธ๊ณ ) https://velog.io/@folw159/iOS-URLSession
- prepareForReuse์ ๋ํด์ ์ค๋ช
ํ์์ค.
- ํ ์ด๋ธ ๋ทฐ๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค. ์ฌ์ฌ์ฉ ์ ์ ์ฌ์ฉํ ๋ ๋ชจ๋ ๊ฐ์ด ์ด๊ธฐํ ๋์ด์ผ ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ์ ์ด๊ธฐํ๋ฅผ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ํจ์์ด๋ค.
- ๋คํฌ๋ชจ๋๋ฅผ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ์์ค.
- ๋ฐฉ๋ฒ์ ์ ๋ง ๋ค์ํ๊ฒ ์ง๋ง, ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ Asset - ColorSet์ ๋ง๋ค์ด์ Color๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ViewController๋ณ๋ก ๋ฐ๋ก ๋คํฌ๋ชจ๋๋ฅผ ์ง์์ด ๊ฐ๋ฅํ๋ฐ, overrideUserInterfaceStyle = .dark๋ก viewDidLoad() ํ์ด๋ฐ์ ํด์ฃผ๊ฑฐ๋ UIView๋ง๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ViewController์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ค๋ช
ํ์์ค.
- init : ViewController์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
- loadView : View๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ค.
- ViewDidLoad : view์ Controller๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ ํธ์ถํ๋ค. ๋ณดํต ํ๋ฉด์ด ํ์๋๊ธฐ ์ ์ด๊ธฐํํ๋ ์์
์ ์ถ๊ฐํ๋ค.
- awakeFromNib : nibํ์ผ์ด๋ xib์ ์คํ ๋ฆฌ๋ณด๋๋ฅผ Xcode๊ฐ ์ปดํ์ผ ํ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๋ฐํ์ ์, View๋ฅผ ์์ฑํ๊ธฐ ์ํด nib ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ ์ด๊ธฐํํ๋ค. awakeFromNib์ nibํ์ผ์ด ๋ก๋๋ ํ ์๋น์คํ ์ค๋น๊ฐ ๋์ด์๋ ์ํ์ ํธ์ถ๋๋ค.
- (ํธ์ถ ์์) awakeFromNib - loadView - viewDidLoad
- viewWillAppear : ๋ทฐ๊ฐ ํ์๋๊ธฐ ์ ์ ํธ์ถ๋๋ค.
- viewDidAppear : ๋ทฐ๊ฐ ํ์๋ ํ ํธ์ถ๋๋ค. ๋ทฐ์ ์ ์ฉํ ์ ๋๋ฉ์ด์ ์์ ์ ์ถ๊ฐํ๋๊ฒ ์ข๋ค.
- viewWillDisappear : ๋ทฐ๊ฐ ์ฌ๋ผ์ง๊ธฐ ์ง์ ์ ํธ์ถ
- viewDidDisappear : ๋ทฐ๊ฐ ์ฌ๋ผ์ง๊ณ ๋์ ํธ์ถ
- viewDidUnload : View๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ํ ํธ์ถ
- TableView์ CollectionView์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
- TableView : UIScrollView๋ฅผ ์์ ๋ฐ๊ณ ์์ผ๋ฉฐ, section - row์ ๊ตฌ์ฑ์ด๋ฉฐ section์ header์ footer๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ColleftionView : ํ ์ด๋ธ ๋ทฐ์ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ฐจ์ด์ ์ ๋ ์ด์์ ๊ฐ์ฒด๊ฐ ์์ด์ ์ํ๋ ๋ชจ์์ผ๋ก ์ปค์คํ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
'โ ๏ธ deprecated โ ๏ธ > ๐ง๐ปโ๐ป iOSInterviewquestions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
iOSInterviewquestions - ARC (0) | 2022.04.02 |
---|---|
iOSInterviewquestions - Rx (0) | 2022.04.02 |
iOSInterviewquestions - Swift (0) | 2022.04.02 |
iOSInterviewquestions - Autolayout (0) | 2022.04.02 |
Comments