ํฐ์คํ ๋ฆฌ ๋ทฐ

์ค๋์ GCD๋ฅผ ์ฌ์ฉํ๋ฉด์
์ฃผ์ํด์ผํ ์ฌํญ๋ค์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค~~
์์ํ๊ธฐ ์ ์ ์ฐธ๊ณ ์ฌํญ์ด ์๋๋ฐ์
๋ฐ๋์ main queue์์ ์ฒ๋ฆฌํด์ผ ํ๋ ์์
์ฌ๋ฌ๋ถ๋ ์ ์๋ ์ด์ผ๊ธฐ๋ผ๊ณ ์๊ฐ์ด ๋๋๋ฐ์!
UI์์ ์ main queue์์ ์์ ํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋๋ค!!
์ฝ๋๋ก ๋ฐ๋ก ํ์ธํด๋ณผ๊ฒ์!
DispatchQueue.global().async {
// image ๋ค์ด๋ก๋ task
DispatchQueue.main.async {
// UI ๊ด๋ จ ์์
์ main ์ค๋ ๋๋ก ๋ณด๋ธ๋ค
self.imageView.image = image
}
}
์ด๋ฐ ํํ๊ฐ ๋ ๊ฒ์ ๋๋ค!
ํ๋ก์ฐ๋ฅผ ๋ณด๋ฉด image ๋ค์ด๋ก๋ task๋ฅผ ์ํํ๋ฉด ์๋์ผ๋ก
main thread๊ฐ ์๋ ๋ค๋ฅธ thread์์ ์์ ์ ์ํํ๊ฒ ๋ฉ๋๋ค!
๊ทธ๋์ imageView์ image๋ฅผ ๋งตํํด์ฃผ๋ ์์ ์ main queue๋ก ์ด๋์์ผ ์ค๋๋ค!
๋ง์ฝ main ํ๋ก ๋ณด๋ด์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
Xcode์์ ํ ๋น๋ thread๋ฅผ ์ธ์ํ์ฌ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ฌ์ค๊ฑฐ์์ใ
๋ฉ์ธํ์์ ๋ค๋ฅธ ํ๋ก ๋ณด๋ผ ๋ Sync๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค
main thread์์ sync ์ฌ์ฉํ๋ฉด ์๋ผ!
์ด๋ง ์์ฃผ ๋ค์ด ๋ณด์ จ์ฃ ?
๊ทธ ์ด์ ๋ ํด๋น task๋ฅผ ๋๋ ๋ ๋์ UI์ฒ๋ฆฌ๊ฐ ๋ฉ์ถฐ ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ค!
์๋๊ตฌ์...? ๋ฐ๋ก main queue๋ ์ง๋ ฌ ํ์ด๊ณ sync๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์
ํด๋น ์ผ์ ์ํํ ์ ์์ต๋๋ค(deadlock ๋ฐ์)ใ ใ
๊ทธ์ ๋ง์ฐฌ๊ฐ์ง๋ก main thread์์ task๋ฅผ ๋ค๋ฅธ ํ๋ก ๋ณด๋ผ๋์๋
sync๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๊ณ ๋ฐ๋์ async๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค!!
ํ์ฌ์ ํ์์ ํ์ฌ์ ํ๋ก ๋ณด๋ผ ๋ Sync๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค
์ด ์ํฉ์ ์ด๋ค ์ํฉ์ด๋
๊ทธ๋ฆผ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค!

task1์ sync๋ก ํ์ ๋ณด๋ด๊ณ ํ๊ฐ ๋ค์ ํด๋น ์ค๋ ๋๋ก ๋ค์ task1์ ๋ณด๋์ต๋๋ค!
์ํฉ์ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ณด์๊ตฌ์
task1์ sync๋ก ํ์ ๋ณด๋๋ค : thread2๋ task1์ด ๋๋ ๋ ๊น์ง ๋๊ธฐ์ ๋๋ค.
ํ๊ฐ ๋ค์ ํด๋น ์ค๋ ๋๋ก ๋ค์ task1์ ๋ณด๋์ต๋๋ค : thread2๋ ๋๊ธฐ์ค์ด๊ณ ๋ฐ์ task1์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ต์ฐฉ์ํ(Deadlock)๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์ฃผ์ํด๋ผ
์ํ ์ฐธ์กฐ๋ฉด... ๋ฐ๋ก ARC๋ก ๋ถํฐ ๋ฐ์ํ๋ ๊ฐํ์ํ์ฐธ์กฐ ๋ฌธ์ ์ ๋๋ค!
ARC๋ฅผ ๋ชจ๋ฅด์ ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํ์ธํด ์ฃผ์ธ์
์ด๋ค ์ํฉ์ธ์ง ๋ณด์์ฃ !
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ DispatchQuque๋ฅผ ์์ธํ ๋ณด์๋ฉด
๊ฒฐ๊ตญ ํด๋ก์ ๋ก ์ฌ์ฉํ๊ฒ ๋๊ณ
ํด๋ก์ ์์ ๊ฐํ ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ ๊ฐ์ฒด ์บก์ฒ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฌธ์ [weak self]๋ฅผ ํด๋ก์ ์์์ ๋ถ์ฌ์ค์ผ ํฉ๋๋ค!
DispatchQueue.global(qos: .utility).async { [weak self] in
guard let self = self else { return }
// ์์
๊ณ ๊ณ
}
์๋ ๊ฒ ๋ง์ด์ฅฌใ ใ
๊ธ ์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ฐธ์กฐ : https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard
iOS Concurrency(๋์์ฑ) ํ๋ก๊ทธ๋๋ฐ, ๋๊ธฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ทธ๋ฆฌ๊ณ GCD/Operation - ๋์คํจ์นํ์ ์คํผ๋ ์ด์
๋์์ฑ(Concurrency)ํ๋ก๊ทธ๋๋ฐ - iOSํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋๊ธฐ, ๋น๋๊ธฐ์ ๊ฐ๋ ๋ฐ ๊ทธ๋ฅผ ํ์ฅํ GCD ๋ฐ Operation์ ๊ดํ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- RxSwift
- XCTest
- test
- ํ ์คํธ
- swift ๊ณต๋ถ
- ์ค์ํํธ ๊ณต๋ถ
- ์ค์ํํธ ํ๋กํ ์ฝ
- ์ค์ํํธ map
- xcode
- Clean
- ์ค์ํํธ
- RX
- autolayout
- Property
- swift
- ์คํ ๋ ์ด์์
- ios
- Swift Network
- func
- ๊ณต๋ถ
- swift urlsession
- Protocol
- ํ๋กํผํฐ
- set
- swift ํ๋กํ ์ฝ
- network
- URLSession
- observable
- ํ๋กํ ์ฝ
- Unit Test
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |