TIL_20180718 ~ 20180720
18 Jul 2018 | TIL2018.07.16 ~ 17
- ํด๊ฐํด๊ฐ ๋ฌผ๋์ด๋ฌผ๋์ด :desert_island:
2018.07.18
- ์คํ ์ด์ฑ
- ํ ์ด๋ธ๋ทฐ์ ๋ค์ด๊ฐ๋ ์ด๋ฒคํธ ๋ฑ์ง๋ฅผ ์ํ UILabel ์ปค์คํ ํด๋์ค ๊ตฌํ
2018.07.19
TODO
- URLSession ํจ์์์ ํด๋ก์ ํธ์ถ๋๋ ์์
- ๋คํธ์ํฌ ๊ฐ์๋ฃ๊ณ ๋คํธ์ํนํ๋ก๊ทธ๋๋ฐ ์ ๋ฆฌ
- step4 PR๋ณด๋ด๊ธฐ(์ ๋ฐ์ดํธ๊ฐ ํ์ํ header์ ๋ํ ์ ๋ณด๋ง ๋ฐ์์ค๋ฉด ์ ๋ฐ์ดํธ๋๋ ์์ผ๋ก ํ๊ธฐ..)
- URLSession ๋น๋๊ธฐ์ฒ๋ฆฌโฆโฆ.
์ง๋ฌธ๊ฑฐ๋ฆฌ
- Create a session configuration
- Create a session (with delegate)
- Create Task object with URL
- Send request with closure
- Wait for response (background)
- Wait and receive for data
- Finish or Error by closure
session() - 1,2,3 task๋ง๋ค๊ณ sessionํจ์ ์ข ๋ฃ task.resume() - 4,5?? viewDidLoad์ข ๋ฃ sessionํจ์์ taskํด๋ก์ ์คํ- ๋ค๋ฅธ thread์์..-6,7? (mainthread์์๋ viewdidLoadํจ์๊ฐ ์ข ๋ฃ๋์ผ๋ฏ๋ก ์๋ฌด ์ผ๋ ์ผ์ด๋์ง์๋์ค) ํด๋ก์ ์ response๋ฐ๊ณ ViewController์ storeItems ๊ฐ์ฒด์ ๊ฐ์ด ํ ๋น๋๋ ๋ธ๋ญ์์ handler()์คํ ์ด ์ํ์์ viewdidLoad๋๋๋ฉด ๋น ํ ์ด๋ธ๋ทฐ๋ก ์ด๋ฏธ ๊ทธ๋ ค์ก๊ณ ๊ธฐ๋ค๋ฆฌ๋์ค์ธ๊ฑด๊ฐ?
- viewDidLoad๊ฐ๋๋๋ฉด storeItems๊ฐ ์๋ ์ํ์์ ํ ์ด๋ธ๋ทฐ ๊ทธ๋ฆผ
- ์ธ์ ์ผ๋ก๋ถํฐ storeItems๋ฅผ ๋ฐ์ผ๋ฉด
2018.07.20
- ๋๊ธฐ์ ๋น๋๊ธฐ
override func viewDidLoad() { doSomething1() doSomething2() resetTableView() doSomething3() } private func resetTableView() { DispatchQueue.main.async { [weak self] in self?.tableView.reloadData() } } // resetTableView๋ reloadData๋ฅผ ํธ์ถํ๊ณ ๋๋๊ณ ๋ค๋ฅธ ์ฝ๋๊ฐ ์คํ๋๋ค. ๋ค๋ฅธ ์ฝ๋๊ฐ ์คํ๋๋ ์์ค์ reloadData๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์ผ์ ํ๊ณ ์์ // viewDidLoad()์์ resetTableView์์ reloadData()๊ฐ ์๋ฃ๋์ง๋ ์์๋๋ฐ doSomething3์ด ์คํ๋๋ค.
- mainํ(serial queue)์
self?.tableView.reloadData
์ฝ๋๋ธ๋ญ์ ๋ฃ์ - async๋ผ๋ ๋ป์ resetTableView(): (worker, but ์ผ์ ์ํค๋)ํจ์๋ ํ์ ๋ฃ์ ์ฝ๋๋ธ๋ญ(์ด ๋ํ worker์ง๋ง ์ด ๊ด๊ณ์์๋ ์ผ์ ํ๋ ํจ์์)์ธ
self?.tableView.reloadData
์ด ์๋ฃ๋๋ ๋ง๋ ์คํ๋ง ์ํค๊ณ (์ผ๋ง ์ํค๊ณ )์ข ๋ฃ๋๊ฒ ๋ค๋ ๋ป์ - ์ผ์ ์ง์ํ๋ ์ชฝ๊ณผ ์ง์๋ฐ์๊ฑธ ์ฒ๋ฆฌํ๋ ์ชฝ์ ๊ด๊ณ๋ฅผ ํญ์ ์๊ฐํ์
- ์ผ์ ์ง์ํ๋ worker(assignor)๊ณผ ์ผ์ ์ง์๋ฐ์์ ์ฒ๋ฆฌํ๋ worker(assignee)๋ฅผ ํธ์์ ์ ๋ ๊ฒ ๋ถ๋ฅธ๋ค๊ณ ๊ฐ์
- Queue๋ ์ผ๋จ ์๊ด์์ด
.sync
๋ก ํธ์ถํ๋์ง.async
๋ก ํธ์ถํ๋์ง๋ก ๊ตฌ๋ถํ์. - ๋น๋๊ธฐ,
async
: assignor๋ assignee์๊ฒ ์ผ์ ์ํค๊ณ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ฐ๋ผ์ assignor๊ฐ ํ๋ ๋ค๋ฅธ ๋ง์ ์ผ๋ค๊ณผ ํจ๊ป ๋ณด๋ฉด ์ด๋ค๊ฒ ๋จผ์ ์๋ฃ๋ ์ง ๋ณด์ฅ ํ ์ ์๋ค. - ๋๊ธฐ,
sync
: assignor๋ assignee์๊ฒ ์ผ์ ์ํค๊ณ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ค. ์ด๋๋ assignor๊ฐ ํ๋ ๋ค๋ฅธ ๋ง์ ์ผ๋ค๊ณผ ์์๊ฐ ๋ณด์ฅ๋๋ค.- ๋ค๋ง ์ฃผ์ํ ์ ์ main queue์์ syncํ๊ฒ ๋์ํ๊ฒ ํ ๋์ธ๋ฐ, assignor๊ฐ ๋ฉ์ธํ์์ ๋ ๋ค๋ฅธ assignee์๊ฒ ๋ฉ์ธํ์์ syncํ๊ฒ ๋์ํ๋๋ก ํธ์ถํ๋ฉด ์๋ก ์์ ์ด ์๋ฃ๋๊ธฐ๋ง ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ๋๋ฝ ์ด๋ฐ์ ํ ์ ์์.
- Queue: Concurrent / Serial ํ๋ ์ข ๋ค๋ฅธ ์ด์ผ๊ธฐ์
- serial: ์ฑ๊ธ์ค๋ ๋, Concurrent: ๋ฉํฐ์ค๋ ๋
- serial์ ์ฑ๊ธ์ค๋ ๋์ด๊ธฐ๋๋ฌธ์, ๋ฐ๋๋ฝ ๋ฐ์์ ์ํ์ด ์์
Comments