안녕하세요 Hani입니다. 지난번 클래스의 강한 참조 순환 포스팅 에서는 weak unowned 키워드를 통해 문제를 해결했죠? 이번 주제는 대망의 클로저의 강한 참조 순환입니다. 제가 최근 ARC에 대해 공부를 시작하게 된 계기..! [weak self] 를 쓰는 이유를 오늘 알게 될 거예요. 👍 그럼 코드를 한번 봐봅시당 class HTMLElement { let name: String let text: String? lazy var asHTML: () -> String = { if let text = self.text { return "\(text)" } else { return "" } } init(name: String, text: String? = nil) { self.name = name s..
안녕하세요 Hani입니다. 저번 ARC포스팅 에서는 클래스의 인스턴스 간 상호 참조에 의해 참조 횟수가 0으로 내려가지 않는 문제점이 발생했었습니다. 이번에는 그에 대한 해결 방안을 다뤄볼까 합니다. 사실 저번 포스팅에서 강한 순환 참조(Strong Reference Cycle)에서 언급을 하지 않고 얼렁뚱땅 넘어간 게 있어요. 그건 바로 Strong🔥이라는 키워드입니다..! 강한 순환 참조의 첫 번째 해결 방안은 강한 참조를 약한 참조로 만드는 것입니다. 코드를 보면서 얘기해볼게요. class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(name) is..
안녕하세요 Hani입니다.☺️ 이번에는 자동 참조 카운트(ARC)에 대하여 알아볼게요. 스위프트는 앱의 메모리 사용을 추적하고 관리하기 위해 ARC라는 놈을 사용합니다. ARC는 참조 타입의 객체에 대하여 자동적으로 메모리를 관리해주는 장치입니다. ARC가 없었던 시절에는 개발자들이 수동적으로 메모리를 관리해주는 코드를 넣어서 메모리를 할당/해제해야 했답니다. 🥺 그럼 ARC는 어떻게 일하길래 자동적으로 메모리를 관리해주느냐..! 먼저, ARC는 클래스의 인스턴스를 생성할 때마다 그에 맞게 메모리를 할당하여 인스턴스를 메모리에 적재시킵니다. class Person { let name: String init(name: String) { self.name = name print("\(name) is bein..
안녕하세요 Hani입니다. 클로저를 공부하다가 맞이한 일급객체(First class Citizen)..! 일급객체에 대한 이해가 선행되어야할 것 같아서 바로 알아보러 가겠습니당🔥 일급객체는 다음 세 가지 조건을 만족하는 객체를 말합니다. 변수나 상수에 저장 및 할당을 할 수 있어야 합니다. 인자(Argument)로 전달될 수 있어야 합니다. 반환할 수 있어야 합니다. 스위프트의 함수는 일급객체의 조건을 만족시킨다고 하는데요..! 일단 만만한 함수를 하나 만들어놓고 스위프트에서의 함수가 일급객체에 속하는지 확인해 보겠습니다. //function func summation(_ L: Int, _ R: Int) -> Int { return L + R } //변수나 상수에 저장 및 할당을 할 수 있어야 합니다. ..
안녕하세요 Hani입니다. 이번에는 클로저를 알아보겠습니다. 클로저를 공부하려고 마음먹은 계기는 ..! Action Sheet를 사용하려고 했는데 Action을 누르면 어떤 행동을 할 것인지 정하는 handler가 있었기 때문이에요. 사실 비슷한 인자를 Present에서도 본 적이 있습니다. 다만 화면 전환만을 목적으로 할 때는 이 인자에 굳이 뭘 넣을 필요가 없었기 때문에 그냥 넘어갔었어요🥺 하지만 Action Sheet는 눌렀을 때의 동작을 직접 넣어줘야 하기 때문에 지나칠 수 없었답니다. 하여튼 클로저라는 게 스위프트에서 처음 접한 생소한 단어라서.. 일단 빌드업으로 함수에 대하여 얘기해보겠습니다. //function func summation(_ L: Int, _ R:Int) -> Int { re..
안녕하세요 Hani입니다. Swift에서는 모든 저장 프로퍼티가 초기 값을 받을 수 있도록 도와주는 두 종류의 Initializer를 제공합니다. Init과 Convenience Init, 두 Initializer의 차이에 대하여 알아보겠습니다. Init Init(=Designated Init)은 Swift의 기본 생성자입니다. 생성자를 통해 Class, Struct, Enum의 인스턴스에 담길 저장 프로퍼티의 초기 값을 설정할 수 있습니다. 하지만 Init은 타입 안에 존재하는 모든 저장 프로퍼티에 대해 초기화를 해야 한다는 조건이 있습니다. 단, 프로퍼티의 기본 값을 정해주는 경우나 저장 프로퍼티가 옵셔널이라면 Init에 포함되지 않아도 괜찮습니다. struct Color { let red, gree..
- Total
- Today
- Yesterday
- WWDC19
- test coverage
- WWDC21
- IOS
- 다익스트라 시간복잡도
- 최단경로 알고리즘
- 네트워크 유량
- CPU와 Memory
- MeTal
- 벨만포드 알고리즘
- 최단경로 문제
- 에드몬드 카프 알고리즘
- 최대 매칭
- observeOn
- rxswift
- CompositionalLayout
- 강한 순환 참조
- 코딩대회
- 컴퓨터 추상화
- WWDC16
- 포드 풀커슨 알고리즘
- mach-o
- 부스트캠프 6기
- Testable
- 벨만포드 시간복잡도
- HIG
- WWDC17
- 네트워크 플로우
- 최단경로문제
- State Restoration
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |