-
Review of Build a Basic UI - Food TrackeriOS/🤖 App 2021. 1. 18. 17:01
사소하더라도 새로 알게 된 점을 적고, 복습 차원에서 중요한 점을 되짚어 보고 싶었습니다. 특히 용어들과 그 용어들에 대한 개념을 놓치지 않고 싶습니다. 공식 문서에서 사용하는 용어를 아는 것은 소통에 있어서 아주아주 critical 한 factor라고 생각하기 때문입니다. Project navigator Navigator selector bar 중에 가장 왼쪽에 위치한 navigator로 프로젝트를 구성하는 파일 전체를 볼 수 있습니다. The App Delegate Source File #앱 상태변화 처리 #앱 레벨 이벤트 처리 #앱 생명주기 관리 `system`이라는 용어가 등장합니다. 앱을 구동하는 OS 라고 생각하고 글을 작성하였습니다. AppDelegate.swift 파일은 두 가지 주요 기능..
-
[Swift] 프로토콜 속성 요구사항 (Property Requirements)iOS/🟠 Swift 2021. 1. 15. 14:27
참고 자료: Protocols - swift.org var protocol Figure { var name: String { get set } } 프로토콜에서 속성 선언 앞에 붙는 `var` 키워드는 속성의 가변성 과는 관련이 없습니다. 프로토콜에서 속성은 무조건 앞에 `var` 키워드를 붙여야합니다. 또한 저장속성 혹은 계산속성만으로 구현을 강제할 수도 없습니다. 속성의 가변성은 변수 의 타입 뒤에 붙는 { get set } 의 조합 으로 결정됩니다. get , set 이 모두 있다면 읽기 쓰기를 모두 가능하게 구현해야 하고, get 만 있는 속성이라면 읽기만 가능해도 프로토콜을 따르는 것입니다. 읽기 쓰기를 모두 가능하게 구현해도 됩니다. gettable: 속성을 읽기 가능하게 만드는 것 settab..
-
[Swift] 프로토콜 개요 (Protocol Overview)iOS/🟠 Swift 2021. 1. 15. 14:13
참고 자료: Protocols - swift.org 개요 프로토콜은 요구사항입니다. 프로토콜에는 구현해야하는 멤버들의 목록이 나열되어 있습니다. 프로토콜을 채용한 형식은 요구사항을 반드시 모두 구현해야 합니다. " When you adopt protocol, you should conform to protocol." 이것을 Adopting Protocol 이라고 하며 `프로토콜을 따른다`, `프로토콜을 채용한다` 라고 표현합니다. 프로토콜에는 구현 내용은 들어가 있지 않고, 채용한 타입이 직접 구현을 합니다. 프로토콜은 프로토콜 간 상속을 지원하며, 클래스와 달리 다중 상속도 지원합니다. 즉, 하나의 프로토콜은 여러개의 프로토콜을 동시에 상속받을 수 있습니다. enum, struct, class 가 프로..
-
The Role of View Controllers (3) - Overview - View Controller Programming Guide for iOSiOS/🍎 Documentation 2021. 1. 14. 01:20
출처 : Apple Developer Documentation Resource Management UIViewController는 더 이상 필요하지 않은 자원을 자동으로 메모리 해제합니다. 하지만 이것을 서브 클래싱한 커스텀 코드에서, 개발자가 명시적으로 생성한 객체들은 그것을 만든 사람이 직접 관리해주어야 합니다. 가용 메모리가 적어졌을때, UIKit은 앱들에게 필요하지 않은 리소스를 free up ( = release = 메모리 해제 ) 할 것을 요청합니다. 개발자가 이것을 이용해 메모리 해제를 할 수 있는 방법은 VC에 didReceiveMemoryWarning 메소드를 구현하는 것입니다. 이 메소드에서 더 이상 필요하지 않은 참조를 지울 수 있습니다. 예를 들어 캐싱된 데이터를 지울 때 사용할 수..
-
The Role of View Controllers (2) - Overview - View Controller Programming Guide for iOSiOS/🍎 Documentation 2021. 1. 14. 01:06
출처 : Apple Developer Documentation Data Marshaling marshal = organize View controllers (이하 VC)는 그 계층에 있는 view 들과 앱에서 관리하는 데이터들의 중계자 (intermediary)입니다. UIViewController를 서브 클래싱 한 커스텀 코드에서, 관리할 필요가 있는 데이터들이 있으면 변수를 추가합니다. 이러한 관계는 아래 그림과 같은 모양이 예가 될 수 있습니다. 이 그림에서 VC는 관리할 데이터들의 참조를 가지고 있고, 동시에 데이터를 화면에 뿌려주는 역할을 하는 View들의 참조 또한 가지고 있습니다. 이것들을 잘 다루는 것은 개발자의 몫입니다. 개발 시에는 데이터 객체와 VC 사이에 명확한 책임 분리를 해야 합..
-
The Role of View Controllers (1) - Overview - View Controller Programming Guide for iOSiOS/🍎 Documentation 2021. 1. 14. 00:41
출처: Appple Develover Documentation [ View Controller Programming Guide for iOS ] View controllers는 앱 내부구조의 기본 요소입니다. 대부분의 앱은 여러 개의 View controller를 가지고 있습니다. 각각의 View controller는 앱 내 존재하는 UI 일정 부분씩을 담당하고 interactions ( 이벤트 처리 ) 들을 담당합니다. 또한 다른 UI로의 transition을 용이하게 합니다. 즉, View controller는 앱에서 아주 중요한 역할을 맡습니다. UIKit이 제공하는 UIViewController 클래스는 View들을 관리하고 , 이벤트를 처리하고, 다른 View controller로 이동하고 (t..
-
Closure Capture List - MemoryiOS/🟠 Swift 2021. 1. 5. 13:49
언제 이 이슈를 유념해야 할까 클로저를 인스턴스 속성에 저장할 때입니다. 발생하는 상황 클로저의 강한 참조 순환은 다음 상황에 발생합니다. 1. 클로저가 인스턴스의 프로퍼티일 때 2. 클로저의 값 획득 상황 클로저 내부에서 self.(propertyName)이나, self.(methodName)처럼 인스턴스의 속성이나 메서드를 호출할 때, 클로저는 self를 획득하므로 강한 참조 순환이 발생합니다. 문제는 클로저가 획득한 인스턴스의 참조 카운트를 증가시켜 메모리 해제를 방지한다는 것입니다. 즉, 강한 참조를 유지하게 됩니다. 단, 클로저 내부에서 self 속성을 여러 번 호출하여 접근한다고 해도 참조 횟수는 한 번만 증가한다고 합니다. 앞선 글에서는 참조 타입의 인스턴스와 참조 타입 인스턴스 때문에 강한..
-
Memberwise Initializer - InitializeriOS/🟠 Swift 2021. 1. 5. 13:30
" 구조체에만 특별히 제공되는 이니셜라이저 " Struct 에만 특별히 제공되는 Initializer가 있습니다. 이 Initializer는 초기화 시점에서 수정 가능한 속성에 한하여, Argument로 제공합니다. 선언 시점과 초기화 시점을 구분해서 생각해보면, 위 문장을 쉽게 이해할 수 있습니다. 가능한 모든 Member를 초기화할 수 있게 해 주기 때문에 앞에 Memberwise Initializer로 명명된 것 같습니다. Parameter 목록에 추가되지 않을 경우는, let 으로 기본 값이 선언된 저장속성일 경우입니다. let으로 지정하면 값이 한번 선언된 이후 수정할 수 없기 때문입니다. 추가적으로 let이지만 기본 값은 선언되지 않았다면, 초기화 시점에서 처음 값이 들어가는 것이므로 Para..
-
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..