[스탠포드iOS] UITextField
·
iOS/스탠포드 iOS 강의
UITextFieldbecomeFirstResponder: UITextField를 첫번째 응답자로 만들어 키보드를 올림resignFirstResponder: 키보드를 내리기 위해 첫번째 응답자로 하는 것을 멈춤 delegation- delegation은 주로 "return" 키와 함께 사용func textFieldShouldReturn(sender: UITextField) -> Boolreturn을 클릭하면 UITextField 델리게이트가 위와 같은 메시지를 보냄return을 누르면 타겟액션이 작동. true를 반환하지 않으면 델리게이트에 의해 작동되지 않음여기서 resignFirstResponder를 해주면 return 키를 눌렀을 때 키보드를 내려주게 됨 편집이 끝났을 때 알아내는 메소드func t..
[스탠포드iOS] 멀티쓰레딩(Multithreading)
·
iOS/스탠포드 iOS 강의
멀티쓰레딩(Multithreading)일을 처리하는 별도의 쓰레드를 갖추는 것iOS에서 멀티쓰레딩은 '큐'(일을 처리하기 위해 줄을 서는 것)와 같음큐가 여러 개가 있을 수 있고 시스템은 각각의 큐에서 꺼내서 각각의 쓰레드에서 작동 'Serial'(직렬)로 동작 : 큐에서 맨 위에 있던 함수가 꺼내져서 처리가 끝나면 그 다음 것이 처리'Concurrnet'(병렬)로 동작: 큐 맨 위에 있던 것이 꺼내져서 쓰레드에서 처리되기 시작.  놀고 있는 쓰레드가 있으면 큐에서 다음걸 꺼내서 다른 쓰레드에서 처리 Main Queue(메인 큐)- 모든 UI가 작동해야 할 곳에서 사용- 시간이나 리소스를 잡아먹는 UI 외의 모든 처리는 메인 큐 밖에서 처리- 메인 큐에서 동작하는 것들은 직렬 처리 - UI가 차례에 맞게..
[스탠포드iOS] 프로토콜(Protocol)
·
iOS/스탠포드 iOS 강의
프로토콜(Protocol)API를 더욱 간결하게 표현하는 방법이며 하나의 타입임클래스와 구조체를 완전하게 구현해놓지 않고 클래스와 구조체가 무엇에 대한것인지만 밝혀둠프로토콜은 선언된 메소드와 프로퍼티로 된 집합체타입을 사용하는 곳이라면 어디든 사용 가능프로토콜을 실행하는 클래스(class, struct, enum등) 안에서 실행프로토콜의 일부나 전부를 실행하기 위해 extension을 사용하는 것도 가능(extension protocol 선언)저장 공간을 갖지 않음(계산 프로퍼티만 가질 수 있음) 프로토콜을 사용하기 위한 단계1. 프로토콜 선언 : 프로토콜에 들어갈 메소드, 프로퍼티 선언2. 클래스, 구조체, enum 중 하나에서의 프로토콜 실행 선언3. 프로토콜 실행 Optional methods in..
[스탠포드iOS] 익스텐션(Extensions)
·
iOS/스탠포드 iOS 강의
익스텐션(Extensions)메소드나 프로퍼티를 다른 클래스에게 추가하도록 해줌extension UIViewController { var contentViewController: UIViewController { if let navcon = self as? UINavigationController { return navcon.visibleViewController } else { return self } }}연결된 뷰컨트롤러가 네비게이션컨트롤러든 아닌든 상관없이 내가 보고자 하는 뷰를 가져올 수 있음클래스에 맞는 메소드로 설계해야함if let myvc = segue.destinationViewController.contentViewCont..
[스탠포드iOS] 클로저(Closure)
·
iOS/스탠포드 iOS 강의
클로저(Closure)인라인 함수힙 메모리 안에 저장됨 → 기본적으로 참조 타입클로저 내부에서는 그 주변에 있는 범위 안 모든 변수 참조 가능지역변수를 넣은 클로저 중 하나에 지역변수 캡처하면 그 지역변수들 역시 보관되어야 함클로저 안 캡쳐가 된 모든것들은 이미 힙 안에 있다면 클로저로부터 strong포인터를 갖고 아니면 힙으로 옮겨짐객체가 클로저를, 클로저가 객체를 서로 가리킴 - 서로 strong 포인터를 가짐힙을 벗어날 수 있는가? 포인터 중에 하나를 nil로 설정하지 않는 한 방법 없음 루트 연산 시 빨간색으로 디스플레이를 바꾸는 함수를 추가 예시func addUnaryOperation(symbol: String, operation: (Double) -> Double)//ViewController..
[스탠포드iOS] 메모리 관리
·
iOS/스탠포드 iOS 강의
값 타입과 구별되는 참조타입(Reference) Class들은 heap에 저장메모리는 자동 관리(ARC) : 어떤 것을 가리키고 있는 포인터 탐지 및 참조횟수가 0일 시 놓아버림평소에는 ARC에 대해 생각하지 않아도 되지만 ARC에 영향을 줄 수 있는 몇 가지 방법이 있음 ARC에 영향을 주는 변수 사용시의 키워드- strong, weak, unowned strongdefault값. 기본적인 Reference Counting(참조 집계) 방식힙 안에 있는 것들을 포인터가 더 이상 그것을 가리키지 않을때까지 힙에 머물도록 강제 weak힙에 있는 것에 아무도 관심이 없다면 힙에서 제거할 수 있다(nil로 설정)힙에 있는 어떤 것을 가리키고 있지만 그 안에 뭐가 있는지는 그만큼 관심이 없어서 사라지면 nil로..
[스탠포드iOS] ViewController 생명주기
·
iOS/스탠포드 iOS 강의
Lifecycle뷰 컨트롤러 생명주기는 메소드 세트임뷰 컨트롤러가 생명주기를 거치는 동안 뷰 컨트롤러에 보내지는 메소드생명주기 시작은 MVC 생성부터그 다음엔 아래 상황들이 일어남1) 연결되고 준비되는 과정2) outlet 세팅3) 나타나거나 사라짐(스플릿 뷰 같이 나타났다가 사라짐)4) 기하학 변화(가로 세로 전환시 화면 변화 등)5) 메모리 공간 부족 상황(메모리 할당 요청) viewDidLoadLoad : Outlet을 불러온다는 의미초기화 함수를 넣기 적합ViewController의 init() 메소드를 오버라이드 하지 않아도 됨준비도 되었고 Outlet도 설정되어 있음 → UI를 업데이트하는데 최적임geometry 관련 작업하지 않음 → 뷰의 geometry는 스토리보드에서 정사각형이기 때문에 ..
[스탠포드iOS] Gestures
·
iOS/스탠포드 iOS 강의
Gestures화면을 통해 전달된 사용자 입력iOS에는 사용자 입력을 제스처로 인식하는 추상 레이어 존재제스처는 UIGuestureRecognizer라는 클래스의 인스턴스에 의해 인식됨UIGuestureRecognizer자체는 추상적. 생성할 일 없음. 구체화된 서브클래스 사용원하는 제스처 종류를 쓸 때 그 서브클래스들을 생성함(PanGestureRecaognizer, PinchRecognizer 등..) Recognizer 클래스 사용의 두 가지 스탭(GestureRecognizer, GestureHandler)1. 원하는 GestureRecognizer 생성 및 UIView 객체가 Recognizer를 받아서 해당 제스처를 인식할 수 있도록 설정   (Controller가 담당)2. Recognize..
[스탠포드iOS] Text & Image
·
iOS/스탠포드 iOS 강의
1. Text폰트로 표현되는 UIBezierPath의 모음UIBezierPath가 그려지는 높은 수준 방법 View에  UILabel을 하위뷰로 얹고 싶지 않고 drawRect로 텍스트를 그리는 방법NSAttributedString(Objective-C 클래스) 각각의 문자를 어떻게 그릴지에 대한 속성으로 구성모든 문자에 대한 설정값(컬러, 폰트 등)이 담긴 Dictionary를 가지고 있음let text = NSAttributedString("hello")text.drawAtPoint(aCGPoint)let textSize: CGSize = text.size스위프트에서 사용을 어렵게 만드는 두가지 차이점 1. 값이 변할 수 있는 특성을 var과 let으로 할 수 없음NSAttributedString을 ..
[스탠포드iOS] View
·
iOS/스탠포드 iOS 강의
1. ViewView는 좌표공간위계구조를 가지고 있음서로 겹칠수도 있음모든 뷰는 하나의 슈퍼뷰를 가짐여러개의 자식뷰를 가질 수 있음 * UIWindowThe UIView at the very, very top of the view hirearchy(even includes status bar)가장 상위의 뷰 계층에 존재앱마다 한개씩 존재 뷰를 넣고 빼는 동작을 하는 함수addSubview는 부모뷰에, removeFromSuperView는 삭제될 그 뷰에 호출addSubview(aView: UIView) //sent to aView's(soon to be) superviewremoveFromSuperView() //this is sent to be the view you want to remove(n..