AutoLayout AutoLayout 의 핵심 Constraint(제약) 이 AutoLayout 의 핵심이다. 뷰 들에게 왼쪽에서 어느정도 떨어져있으면 좋겠어 라는 식으로 제약을걸어 앱을 실행할 기기의 화면 크기와 상관없이 유동적인 화면을 제공할수 있도록 한다. AutoLayout Attributes 오토레이아웃의 제약은 하나의 수식으로 나타낼수 있다. 수식을 보자면 RedView.Leading = 1.0 x BlueView.trailing + 8.0 여기서 RedView 는 목적지이며 Leading 는 앞머리(왼쪽) 을 의미한다. RedView 는 BlueView 의 Trailing(오른쪽) 에서 8.0 포인트 떨어진곳에 위치한다. 라고 해석할수있다. Relationship 은 관계를 뜻함. (=) ..
Interface Builder 의 도구들 Update Frame 메뉴 잘못 만져서 view 의 위치가 바뀌었을 경우 클릭시 현재 view 가 조건에 걸려있는 위치,크기로 적용된다. Align 메뉴 엣지 들을 정렬 시켜줄수 있는 메뉴 view 여러개를 Top Edges Align 로 묶어주게되면 같은 위치의 높이로 정렬되게 된다.(위치 뿐만아니라 조건에 따라 크기도 결정할수 있음.)(여러개가 관계를 맺게 됨.) 핀(pin) 메뉴 view 간의 거리 혹은 사이즈를 정할수있는 메뉴 Aspect Ratio view 의 크기를 비율로 정해주고 싶을 경우 사용되는듯하다. reserve issue 메뉴 선택한 view와 모든 view 의 설정이 나뉘어져 있음. Add Missing Constraints 부족한 조건..
sync, async 사용법 동기(sync) 는 작업이 처리되기를 기다리는것. 비동기(async)는 작업이 처리되기를 기다리지 않고 다른 스레드에서 처리되는것. sync는 동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().sync {} 를 호출한것은 main 스레드말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 내작업이 끝날때까지 기다려야해 라는 의미가 된다. async는 비동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().async {} 를 호출한것은 main스레드 말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 다음 작업이 있다면 끝날떄까지 기다리지말고 처리해도 좋아! 난 새스레드 에서 알아서 작업할게! 라는 의미가 된다. 위의 ..
GCD(Grand Central Dispatch) 작업을 동시에 처리하기위해 스레드를 여러개 활용하는것은 불가피하다. 그렇다면 어떻게 스레드를 관리해주어야 할까?? 일일이 개발자가 스레드를 관리하는것은 매우 번거롭고 힘든일이다. 애플에서는 코드를 동기 혹은 비동기로 처리해준다면 시스템이 알아서 스레드를 관리해주는 방식을 제공하며 그것이 GCD 이다. GCD는 멀티 코어 환경과 멀티 스레드 환경에서 최적화된 프로그래밍을 할수 있도록 애플이 개발한 기술이다. GCD 를 사용하기 위해 Dispatch 라는 프레임워크를 사용해야하며 Dispatch Queue 라는 클래스를 사용해 대기열에서 작업의 순서를 동기, 비동기 처리만 해주면된다! Dispatch Queue Dispatch Queue 가 무엇이냐? GCD..
동시성 프로그래밍 에 필요한 개념들 멀티 스레드 환경에서 여러가지 작업을 동시에 처리하는 기술을 말한다. 동시성 프로그래밍이란 영어로 Concurrency Programming 라고 한다. 지금껏 나는 코드는 한줄, 한줄 순서대로 실행되는것으로 알고 코드를 작성해왔다. 동시성 프로그래밍을 이용해 동시에 여러가지작업을 하는것처럼 보이게 할수있다. 예를 들면 자주사용하는 음악재생 어플을 예시로 들어보자. 노래를 재생시켜두고 음악재생 어플에서 다른 뷰를 띄워주거나 동시에 다른 작업들을 하기도한다. 동시성 프로그래밍은 이를 가능하게 하는것이다. 코어 코어는 CPU 의 핵심으로 CPU 에서 실제로 일을 처리하는 녀석이다. 코어는 한번에 한가지 일만 할수있으며 코어가 여러개라면 여러개의 일을 동시에 처리할수 있다...
Swift Lint 란? 커뮤니티 혹은 팀에서 정한 스타일 규칙을 따르지 않는 코드부분을 식별하고 표시하는것을 도와준다. 개발자 마다 코딩 스타일이 다르기때문에, 코드를 작성할 때 추천하는 코딩 스타일, 괜찮은 사례등을 모아 놓은 가이드 라인이다. 이러한 코딩 컨벤션들을 Rule로 정함으로써 모든 Swift 코드가 일관성을 유지하도록 해준다. 이렇게 하면 새로운 개발자가 합류하거나 예전 코드를 읽을 때 도움이 된다. Rule Swift Lint Rule Swift Lint 에는 75개가 넘는 룰들이 있다. Rule에는 Default로 적용되는 Rule도 있지만 사용자에 의해 적용되는 Rule들도 존재한다. Rule들을 세부적으로 적용 시키기 위해서는 .swiftlint.yml파일을 추가해주어야 한다. R..
Static Dispatch, Dynamic Dispatch Static Dispatch(컴파일 타임), Dynamic Dispatch(런 타임) 여기서 Dispatch 는 직역하면 보내다 라는 뜻인데, 어떤 함수를 호출할것인지 결정 해주는것같다. swift 에서는 Static Dispatch, Dynamic Dispatch 두가지 방식이 있다. Static Dispatch(컴파일 타임) 요 방식은 컴파일 타임에 호출될 함수를 결정하고 런타임때에 그대로 실행시킨다. Dynamic Dispatch(런 타임) 요 방식은 런타임에 호출될 함수를 결정한다. 그렇기때문에 swift 에서 클래스마다 함수 주소값의 배열인 vTable(Virtual Dispatch Table) 을 유지하게된다. 하위 클래스가 메서드를..
MetaType, self 와 Self MetaType 공식문에서는 Metatype 은 타입의 타입이라고 정의 되어있다. 이게 대체 무슨소리일까.. 아래 예시를 보자 struct Person { static let name = "malrang" var age = 29 } let malrang = Person() 지금껏 나는 Person 이라는 타입을 정의한후 Person 타입의 malrang 이라는 상수를 정의해주었다. malrang 은 Person 타입의 인스턴스다. 하지만 여기서 Person 은 타입의 타입인 메타타입이라 한다. malrang 인스턴스의 타입의 타입 그러니까 즉 타입 자체?본체?를 메타타입이라고한다. type(of:) 요 메서드는 파라미터에 인스턴스를 넣게되면 인스턴스의 메타타입을 반..