목록전체 글 (79)
나만의 공부 노트
학습 내용 View Controller의 생명주기 ViewController는 생명주기를 가지고 있으며, 이는 ViewController가 생성되고 사라지는 전 과정에서 ViewController에게 전달되는 일련의 메시지입니다. 우리는 통상 생명주기와 연결된 메소드들을 override를 통해서 재정의하고 특정 시점에 원하는 코드를 실행할 수 있게 됩니다. 보통 View Controller는 스토리보드로 구성하게 되며, 몇몇의 특수한 뷰 컨트롤러(ex. 카메라) 등은 코드로 API를 통해서 불러올 수도 있습니다. ViewDidLoad 화면이 초기할때 자주 사용됩니다. 현재의 outlet들이 셋팅되어 있기 때문에 Model을 사용하는 뷰를 업데이트 하기에 아주 좋습니다. 하지만 Bounds와 관련된 것들을..
Git 버전 관리 툴 Git 코드를 작업하다보면 수많은 버전의 코드를 만들어내게 됩니다. 어떨 땐 코드를 되돌려야할 때도 있고, 어떨땐 어떻게 수정했는지를 알아야하는 등 다양한 상황이 생기게 됩니다. 만약 단순히 코드를 작성하면 위와 같은 상황에 직면했을 때, 대응할 수 있는 방법이 없습니다. 그래서 git이라는 툴을 이용해 지난 코드를 어떻게 했는지 알아볼 수 있고, 또 여러 사람들과 협업하며 코드를 작성하기 매우 쉽습니다. Commit 커밋은 코드의 현재 상태에 대해 스냅 샷을 찍는다고 생각하면 됩니다. 스냅샷에 들어가게 되는 내용은 작성자, 설명, 시간과 날짜입니다. commit은 독립적으로 구성하는 게 좋습니다.(한 기능을 구현하고 커밋을 한 번 하는게 좋습니다.) Braching 작은 commi..
깨달은 것 1. Dynamic Animator -> Dynamic Animator에게 뷰를 넘겨주면 뷰의 권한이 아예 애니메이터에게 넘어간다. -> 뷰 계층에는 계속 남아 있지만, 사용자가 제어 불가능 && 오토레이아웃도 적용 X -> animator가 running이라면 함수를 호출하여 적용해야하고, stop되면 사용자가 제어 가능해진다. -> animator가 아이템을 놓는다면 오토레이아웃이 바로 적용된다. -> bound는 유지한 채, transform과 (frame의) center로 직접 값을 움직인다. -> 즉, 애니메이션 도중에 계속 값이 변화하고, 실제 적용된다. 2. UIView.animate -> Dynamic Animator과 다르게 여전히 제어권은 사용자에게 있다. -> 다만, 현재 ..
학습 내용 MVCs 뭉치기 여러 개의 MVC를 사용하기 위해 특수하게 사용되는 View Controller가 있습니다. 이 View Controller는 View로 다른 MVC를 가질 수 있습니다. UITabBarController MVC와 하단의 탭바 아이템으로 구성이 되며, 탭바 아이템은 MVC들의 프로퍼티에 의해 icon, 이름 등이 결정 되게 됩니다. UIPlitViewController Master와 Detail로 구분되며 각각의 하나의 MVC입니다. UINavigationController 새로운 MVC 화면을 열 때 마다, 카드가 하나씩 쌓이는 스택의 형태로 구성됩니다. 즉, 가장 처음에 보였던 화면은 가장 아래에 쌓이게 되고, 새롭게 나타나는 화면이 그 위에 올라가게 되는 것입니다. Bac..
학습 내용 Draw 모든 뷰가 draw를 하지 않습니다.(UIImageView, UIStackView 등등은 subview가 드로잉을 합니다.) 그렇기 때문에 draw를 하지 않는 뷰는 함수를 구현하지 않는게 좋습니다.(그렇지 않으면 새로운 버퍼를 만드는 등 준비 동작을 합니다.) UIGraphicsGetCurrentContext() 해당 전역함수는 nil을 반환할 수 있는 옵셔널 타입입니다. 그러나 draw가 호출될 때에는 명확한 context를 가지고 있기 때문에 nil이 반환될 일이 없습니다. 또한, CG를 이용하여 context에 그리고 있는 경우, strokePath() 또는 fillPath()를 호출하면 context에 있는 경로를 지우면서 그리기 때문에 경로가 남지 않습니다. UIView U..
학습 내용 Error Handling 기본적으로 error를 정의할 때는 enum을 사용하고, Error 프로토콜을 준수합니다. (iOS에서 주는 error는 NSError입니다.) 오류를 던지는 함수는 func save() throws -> Int 와 같이 -> 이전에 throws 키워드를 넣으면 됩니다. 함수 내부에서는 오류를 발생시키는 구간에서 throw (정의한 error)를 통해 에러를 발생시키면 됩니다. 다시 이러한 함수는 do-catch구문과 함께, 그리고 do안에서 try로 코드를 실행해야합니다. catch는 switch문과 유사하게 enum의 error를 받을 수 있습니다. 또는 위와 같이 error를 받고, 나중에 switch 문으로 구분해서 사용도 가능합니다. 심각하지 않은 error..
학습 내용 프로토콜 API가 Caller에게 원하는 메소드나 프로퍼티를 Caller가 구현하도록 하며, Caller는 자신이 원하는 class/ struct/ enum을 전달 할 수 있도록 합니다. 가장 중요한 것은 프로토콜은 하나의 타입이라는 것입니다. 프로토콜에서 구현되는 모든 메소드와 프로퍼티들은 프로토콜을 상속하는 경우 반드시 구현해야 합니다. 프로퍼티의 경우, { get } 또는 { get, set } 인지를 명시해줘야 합니다. struct가 protocol을 채택할 수도 있기 때문에, 변경을 요하는 함수는 mutating 선언을 해주어야 합니다. 만약 오로지 class만 프로토콜을 채택할 수 있게 만들고 싶다면, 선언한 프로토콜명 뒤에 class를 명시해줍니다. class의 경우 init은 반..
학습 내용 Range 우리는 for loop를 통해서 반복적인 작업을 수행할 수 있었습니다. for문을 사용하기 위해선 시퀀스가 필요합니다. (보통 배열, 딕셔너리, 문자열 등등이 시퀀스입니다.) 시퀀스는 Range라고도 표현이 되는데 여기서 Closed가 접두사로 붙으면 보통 마지막 숫자를 제외한다는 뜻입니다.(stride(from:,through:,by:)가 ClosedRange에 해당합니다.) Range는 lowerbound를 닫힌 범위로 upperbound는 열린 범위로 갖고, ClosedRange는 lowerbound와 upperbound 둘 다 닫힌 범위로 포함하는 시퀀스입니다.(수학적으로 닫힘, 열림의 의미와 동일합니다.) 다만, 단순히 끝값들만 가지고 있을 뿐이지 중간의 값들을 가지고 있는..
학습 내용 단축키 Cmd + R 프로그램 실행 Cmd + 0 Navigation 창열기 상단의 탭바의 항목들을 숫자와 매칭되어 있습니다. Cmd + Option + 0 Utility 창 열기 상단의 탭바의 항목들을 숫자와 매칭되어 있습니다. Cmd + Shift + y 디버깅 창 열기 Cmd + Option + Control + Enter 보조 편집창 열기 Cmd + Enter 보조 편집창 닫기 코딩을 하는 과정에서 여러분이 원하는 파일을 빠르게 찾고 싶을 것입니다. Cmd + Shift+ o 빠르게 파일 찾기 메인 편집창과 보조 편집창 중 어떤 화면에 보여줄지를 선택할 수 있습니다. Xcode - preferences - Navigation - Uses Primary Editor 또는 Uses Focu..
학습 내용 세가지 캠프 1. Model 앱이 무엇인지에 대해 관심을 가집니다. UI와 독립되어 있습니다. 2. Controller 어떻게 화면에 표시할 것인지에 대해 관심을 가집니다. 3. View UIButton, UIViewController, UILabel와 같은 UI와 관련된 것이고 Controller의 통제를 받게 됩니다. 서로의 관계 Model과 Controller Controller는 모델에 직접적으로 접근할 수 있지만, Model은 Controller에 Notification & KVO 방식을 통해 모델의 변화를 알립니다. Model과 View Model은 UI에 독립적이며 View와 소통할 수 없으며, View 또한 불가능합니다. View와 Controller Controller는 Vie..