๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
translatesAutoresizingMaskIntoConstraints ์†์„ฑ translatesAutoresizingMaskIntoConstraints A Boolean value that determines whether the view’s autoresizing mask is translated into Auto Layout constraints. If this property’s value is true, the system creates a set of constraints that duplicate the behavior specified by the view’s autoresizing mask. This also lets you modify the view’s size and location using the view’s frame, bounds, or center p.. 2022. 2. 23.
Main Run Loop & Update Cycle ์ด ํฌ์ŠคํŠธ๋Š” view, layout ์—…๋ฐ์ดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์—ฐ๊ด€์ง€์‹์„ ๋จผ์ € ์„ค๋ช…์„ ํ•˜๊ณ  view, layout ์—…๋ฐ์ดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ค๋ช…ํ•  ์˜ˆ์ •. ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค 1. Main Run Loop 2. Update Cycle 3. constraints ์—…๋ฐ์ดํŠธ 4. layouts ์—…๋ฐ์ดํŠธ 5. display ์—…๋ฐ์ดํŠธ 6. Drawing Cycle 1. Main Run Loop ์•ฑ์ด ์‹คํ–‰๋˜์–ด ์‹œ์Šคํ…œ์—์„œ ์ผ์–ด๋‚˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ https://yongminlee26.tistory.com/204 ์— ์ •๋ฆฌํ–ˆ์—ˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰๋˜๋ฉด UIApplication ๊ฐ์ฒด๋Š” ์œ ์ €๊ฐ€ ์ผ์œผํ‚ค๋Š” ์ด๋ฒคํŠธ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค Main Run Loop๋ฅผ ์‹คํ–‰ ํ•˜์—ฌ ์œ ์ €๋กœ๋ถ€ํ„ฐ์˜ input ์ด๋ฒคํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ  ๊ทธ์— ์ƒ์‘๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜.. 2022. 1. 24.
Non-Escaping Closure ์™€ Escaping Closure Non-Escaping ํด๋กœ์ €๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋์„ ๋•Œ, ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ํด๋กœ์ €. Escaping ํด๋กœ์ €๋Š” ํด๋กœ์ €๊ฐ€ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋์„ ๋•Œ, ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋˜๋Š” ํด๋กœ์ €. Non-Escaping ํด๋กœ์ € func runClosure(closure: () -> Void) { closure() } ํด๋กœ์ €๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋ณด๋ฉด ํด๋กœ์ €๊ฐ€ runClosure() ํ•จ์ˆ˜์˜ closure ์ธ์ž๋กœ ์ „๋‹ฌ๋จ ํ•จ์ˆ˜ ์•ˆ์—์„œ closure() ๊ฐ€ ์‹คํ–‰๋จ runClosure() ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒ๋จ ์ด๋ ‡๊ฒŒ ํด๋กœ์ €๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— closure๋Š” Non-Escaping ํด๋กœ์ €์ด๋‹ค. Escaping ํด๋กœ์ € func makeRequest(_ completion: @.. 2021. 12. 28.
์ ‘๊ทผ์ œ์–ด, Access control Access Control, ์ ‘๊ทผ ์ œ์–ด ๋‹ค๋ฅธ ์†Œ์ŠคํŒŒ์ผ ๋ฐ ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ์—์„œ, ์ฝ”๋“œ์˜ ์ผ๋ถ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค(์ ‘๊ทผ)์„ ์ œํ•œ Swift ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋ธ์€ ๋ชจ๋“ˆ ๋ฐ ์†Œ์ŠคํŒŒ์ผ์˜ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ์ ‘๊ทผ์ œ์–ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋‚ด์˜ ์ž๋ฃŒ๋กœ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •,์กฐ์ž‘ํ•˜๋Š” ๋™์ž‘์€ ๋‚ด๋ถ€์— ๋‘๊ณ  ์ ‘๊ทผ(getter),์„ค์ •(setter)ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ๊ฒฐ๊ณผ๋งŒ ๋ฐ›๋„๋ก ํ•˜๋Š” ๊ฐ์ฒด์˜ ์€๋‹‰ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค ๋ชจ๋“ˆ ์ฝ”๋“œ ๋ฐฐํฌ(code distribution)์˜ ๋‹จ์ผ ์œ ๋‹› Xcode์˜ ๊ฐ ๋นŒ๋“œ ๋Œ€์ƒ ( ์˜ˆ : ์•ฑ ๋ฒˆ๋“ค ๋˜๋Š” Framework )์€ Swift์—์„œ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ฒ˜๋ฆฌ ์†Œ์ŠคํŒŒ์ผ ๋ชจ๋“ˆ ๋‚ด์˜ ๋‹จ์ผ Swift์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ (์‚ฌ์‹ค์ƒ ์•ฑ ๋˜๋Š” Framework๋‚ด์˜ ๋‹จ์ผ ํŒŒ์ผ) Access Levels, ์ ‘๊ทผ ๋ ˆ๋ฒจ o.. 2021. 12. 28.
Method Dispatch Method Dispatch ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ Static Dispatch vs Dynamic Dispatch 1. Static Dispatch = Direct Dispatch = Direct Call "์ปดํŒŒ์ผ ํƒ€์ž„"์— ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๋ฅผ ๊ฒฐ์ • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •์ด ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ƒ ์ด์  Value Type์ธ ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์€ ์ƒ์†์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๊ณ , ๋”ฐ๋ผ์„œ Static Dispatch๋ฅผ ์‚ฌ์šฉ 2. Dynamic Dispatch = Indirect Call "๋Ÿฐํƒ€์ž„"์— ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค Swift์—์„œ๋Š” ํด๋ž˜์Šค๋งˆ๋‹ค ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋“ค์˜ ๋ฐฐ์—ด์ธ vTable(Virtual Dispatch Table)์ด๋ผ๋Š” ๊ฒƒ์„ ์œ ์ง€ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ.. 2021. 12. 6.
KVO, Key-Value Observing 1. KVC๋ž€? KVC, Key-Value Coding KVC๋ž€, ๊ฐ์ฒด์˜ ๊ฐ’์„ ์ง์ ‘ ๊ฐ€์ ธ์˜ค์ง€์•Š๊ณ , Key ๋˜๋Š” KeyPath ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• struct Person { var name : String } var person = Person(name:"lee") // ๊ฐ์ฒด์˜ ๊ฐ’ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ let myName = person.name // KeyPath ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ let nameKeyPath = \\.Person.name let myName = person[keyPath: nameKeyPath] Key Path๋ฅผ ๋งŒ๋“œ๋Š”๋ฒ• Key Path ์ข…๋ฅ˜ KeyPath Read-only WritableKeyParh value type ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ.. 2021. 12. 6.