-
Initializers - InitializeriOS/🟠 Swift 2021. 1. 5. 13:00
"이니셜라이저" 개요 Enumeration, Class, Struct 는 모두 개발자가 선언해 놓은 설계도 입니다. 우리는 이 설계도와 Initializer 를 통해 Instance 를 만들 수 있습니다. Initializer의 실행 후, 모든 속성은 기본 값을 가지고 있는 상태여야 합니다. 만약 기본 값이 없는 속성이 존재한다면 Initialization 즉, 초기화는 실패합니다. Initializer의 종류는 여러가지가 있습니다. Default Initializer, Memberwise Initializer, Designated Initializer, Convenience Initializer , Required Initializer 이어지는 글에서 차례로 각각 다뤄보려고 합니다. Basic Synt..
-
Strong Reference Cycle - MemoryiOS/🟠 Swift 2021. 1. 3. 22:26
"강한 참조 순환" ARC의 작동 및 강한 참조의 규칙을 잘 모르고 사용할 때 발생하는 이슈입니다. ARC와 관련되었으므로 참조 타입 사이에서 발생합니다. (class, closure) 발생 예시 개발자가 인스턴스에 nil을 할당하는 경우는 언제일까요? 인스턴스가 더 이상 참조할 필요가 없어서 메모리에서 해제시키고 싶을 경우일 것입니다. 의도는 인스턴스의 메모리 해제였지만, 인스턴스가 해제되지 않고 메모리에 남아있음과 동시에 접근도 할 수 없는 경우가 생깁니다. 바로 강한 참조 순환이 발생한 경우입니다. 타입 인스턴스와 인스턴스 사이(이번 글), 인스턴스와 그 인스턴스의 속성에 저장된 클로저 사이 코드 인스턴스가 서로 강한 참조 하는 경우, 인스턴스에 nil을 넣어도 인스턴스의 속성이 다른 인스턴스를 캡..
-
Weak Reference - MemoryiOS/🟠 Swift 2021. 1. 2. 20:48
" 약한 참조 " 강한 참조 순환을 해결하기 위한 방법 중 하나 입니다. 참조 타입의 변수의 선언 앞에 'weak' 키워드를 써주어서 구현합니다. 강한 참조와 달리 약한 참조는 인스턴스를 소유 ( retain ) 하지 않고 참조 ( refer ) 만 합니다. 따라서 ARC 모델의 reference counting을 증가시키지 않습니다. 또한 도중에 reference counting이 0 이 되어 참조하고 있던 인스턴스가 메모리 해제될 수 있는데, 이 때는 nil로 초기화 됩니다. 기존의 값이 변경되어야 하기 ( instance 주소 - > nil ) 때문에 변수 ( var ) 여야 하고, nil을 담을 수 있어야 하기 때문에 옵셔널이여야 합니다. 종합적으로, weak 키워드는 옵셔널 참조 타입의 변수 앞..
-
[Swift] self 는 어느 시점부터 사용할 수 있을까?iOS/🟠 Swift 2021. 1. 1. 23:45
1차 수정: 2021/06/10 안녕하세요. 오늘은 self 의 접근 가능 시점에 대해서 적어보려고 합니다🐶 사실 이 궁금증은 제가 스위프트를 처음 시작할 무렵 가지게된 것인데, 결론부터 말씀드리자면 이 궁금증은 클래스의 Initialization Process 를 이해하면 완벽하게 해결됩니다😂 저의 경험으로는 이 주제(Initialization Process)를 아주 꼼꼼하게 여러번 읽은 후 비로소 이해가 되었던 것 같습니다. 그럼에도 불구하고 이 글을 적은 이유는 막힌 부분을 해결하기 위해 Initialization 전체를 다시 공부해야할 시간이 없어서, ad-hoc 으로 우선 알고 넘어가려고 하시는 분들을 위해서입니다. :: ad-hoc 이 무조건 나쁜 것이라고 생각하지는 않습니다 이 글에서는 In..
-
Strong Reference - MemoryiOS/🟠 Swift 2020. 12. 31. 12:04
"강한 참조" 참조 타입의 인스턴스를 별도의 키워드 없이 저장할 때, 기본적으로 강한 참조가 생깁니다. Swift의 참조 타입 : Class, Closure 강한 참조를 통해 저장된 인스턴스는 변수 혹은 상수가 1. 소유하고, 2. 참조합니다. ARC의 메모리 해제 판단 기준 ARC는 소유( retain )를 기준으로 Reference Counting을 합니다. 예를 들어, 소유가 1 이라면 메모리 해제를 하지 않고, 소유가 0이 될 때 메모리 해제를 합니다. 그렇다면 소유가 0 이고 참조가 1인 상황이 있을까요? 후술 할 weak와 unowned를 통해 구현할 수 있습니다. Reference Count 를 감소시키는 방법은, 참조하던 변수에 nil을 할당하는 것입니다. 따라서 해제시키려면 Optiona..
-
ARC - MemoryiOS/🟠 Swift 2020. 12. 30. 23:49
"Auto Reference Counting" 배경 더 이상 사용되지 않는 인스턴스가 메모리에 남아있다면 메모리 누수가 발생합니다. 메모리 누수는 앱 성능의 저하로 이어지기 때문에 인스턴스의 적절한 해제는 중요한 이슈입니다. stack 에 저장된 인스턴스 ( 값 타입 ) 는 해당 블록이 종료되면 자동으로 해제되지만, heap 에 실제 데이터가 저장된 참조 타입은 메모리 해제를 직접 해주어야 합니다. MRC 와 ARC Apple 의 개발환경 Cocoa 에서는 메모리 관리 모델이 두 가지가 존재합니다. MRC ( Manual Reference Counting) 과 ARC (Auto Reference Counting) 입니다. Objective - C 에서는 MRC 와 ARC를 모두 지원합니다. 하지만 MRC..
-
M1 MacBook git 설치법 (without Homebrew)iOS/🛠 이슈와 궁금증 2020. 12. 29. 18:49
💠🟢[우짱의 iOS 블로그]🔵💻 iOS를 공부하면서 배운 내용을 기록하고 있습니다. 목적 Apple git 이 아닌 Original git 설치 배경 최근에 M1 맥북으로 기변을 하였는데, Homebrew를 rosetta2 에뮬로 돌려야 해서 그런지 git 이 정상적으로 설치되지 않았습니다. XCode 를 설치했다면 Apple git이라고 하는 git이 같이 설치되지만, original git을 설치하고 싶었습니다. 다만 git 공식 홈페이지에서는 Xcode 설치를 통한 git 다운로드도 하나의 방법으로 제시하고 있습니다. 해결법 소스트리를 설치해서 git을 적용합니다. 결과 끝!
-
[Swift] 값타입과 참조타입 ( Value Type vs Reference Type )iOS/🟠 Swift 2020. 12. 29. 18:30
1차 수정: 2021.06.06 안녕하세요. 이번 글에서는 스위프트의 값타입과 참조타입의 차이점을 메모리에 저장되는 관점에서 다루어보겠습니다🐶 *속성감시자에서 값타입과 참조타입의 작동차이가 궁금하다면? -> 속성감시자란 (Property Observer) ? Swift에서 자료구조들은 다음과 같은 타입을 가집니다. 값 타입 참조 타입 Structure Enumeration Tuple Class Closure /* Value Type */ struct testStruct { var name = "" var age = 0 } /* Reference Type */ class testClass { var name = "" var age = 0 } 대표적인 타입인 Struct와 Class를 통해 비교해 보겠습니다..
-
Optional PropertyiOS/🛠 이슈와 궁금증 2020. 12. 2. 02:57
" 옵셔널 속성은 기본 값을 설정하지 않을 시 nil 로 초기화 된다 " import UIKit class Test: UIViewContorller { var updateTimer: Timer? @IBOutlet weak var updateButton: UIButton! //Implicitly Unwrapped Optional ... } Test 클래스의 멤버에 default 값이 없음에도 컴파일 에러가 발생하지 않고 initializer 가 자동 생성되는 이유는, 옵셔널 값의 경우 자동으로 nil 이 기본 값으로 초기화되기 때문이다. IUO 도 마찬가지이다. 끝.