 Apple Lover Developer & Artist

영속적인 디자인에 현대의 공감을 채워넣는 공방입니다

반응형

전체 글 116

[iOS - Laboratory] iOS 앱의 실행 흐름 추적해보기

Overview UIKit은 앱에 필요한 다양한 핵심적인 객체를 제공한다. 그 중에는 System과 상호 작용하는 객체, 앱의 main 이벤트 loop에서 동작하는 객체, 컨텐츠를 화면에 보여주는 객체가 포함되어있다. 개발자는 위 객체들 다수를 그냥 사용하거나 약간의 수정을 거쳐 사용할 수 있다. 어느 객체를 수정할 수 있으며 언제 객체들을 수정할 수 있는지 아는 것은 앱을 구현함에 있어서 중요한 요소이다. UIKit app 의 구조는 Model-View-Controller (MVC) 디자인 패턴에 기반하고 있으며 위에서 언급된 객체들은 디자인 패턴에 맞춰서 목적에 알맞게 나뉘어지게 된다. 대표적으로 ViewController 와 app delegate 객체는 데이터 객체와 UIKit View 사이에서 ..

[Swift] 공식문서 씹어먹기: Automatic Reference Counting

Overview Swift는어플리케이션의 메모리 사용을 추적하고 관리하기 위해 Automatic Reference Counting (ARC) 를 사용한다. 대부분의 경우에서 ARC는 Swift에서 메모리 관리가 "Just Works" 한다는 의미이다. 따라서 개발자는 스스로 메모리 관리에 대해서 신경쓸 필요가 없다. ARC 는 클래스 인스턴스가 사용했던 메모리를 자동으로 해제시켜주며 이 과정은 해당 인스턴스가 불필요해지는 시점에서 이뤄진다. 하지만 일부 경우에서 ARC가 메모리를 관리하기위해 코드 사이의 관계에 대한 더 많은 정보를 더 요구하는 경우가 있다. 이 chapter 에서는 위과 같은 상황을 묘사하며 어떻게 ARC가 어플리케이션의 메모리를 관리하고 있는지 설명해준다. Swift 에서 ARC 를 ..

[Swift] 공식문서 씹어먹기: Property - Computed Property

개요 classes, structures, enumeration 에서는 computed properties 를 선언할 수 있다. computed property 의 값은 고정되어있지 않기 때문에 var 키워드를 통해 선언되어야 한다. 실질적인 값을 저장하지 않는 대신 다른 property에 간접적으로 값을 얻고 설정하기 위해 getter 와 optional setter를 제공한다. struct Point { var x = 0.0, y = 0.0 } struct Size { var width = 0.0, height = 0.0 } struct Rect { var origin = Point() var size = Size() var center: Point { get { let centerX = origin..

[Swift] 공식문서 씹어먹기: Collection Type - Dictionary

Dictionary Dictionary 는 Key-Value 쌍을 가지며 순서가 없는 Collection 이다. Generic Collection 으로 구현되어있으며 저장할 수 있는 Key와 Value가 명확하다. 따라서 같은 타입의 key 그리고 같은 타입의 value 값의 사이의 관계를 순서 없이 저장할 수 있다. Dictionary 에서 각 value 는 유일한 key 값과 연결되어있어서 key 값은 value 를 구분할 수 있는 식별자 역할을 한다. 배열과 다르게 dictionary 내부의 자료에 대한 순서가 없으며 식별자를 통해서만 값을 찾을 수 있다. Dictionary type을 축약형으로 표현할 수 있다. 원본: Dictionary 축약본: [Key: Value] ← 선호되는 방식 init..

[Swift] 공식문서 씹어먹기: Initialization

Overview 초기화는 사용할 class, struct, enum의 인스턴스를 준비하는 절차 인스턴스의 각 stored property 에 대한 초기값을 설정 새 인스턴스를 사용할 준비가 되기 전에 필요한 다른 설정 또는 초기화를 수행하는 작업 인스턴스가 할당 해제되기 전에 모든 사용자 지정 정리를 수행하는 deinitializer 를 구현할 수 있음 Setting Initial Values for Stored Properties 저장된 속성 (stored property의 초기값 설정) 클래스와 구조체는 해당 타입의 인스턴스가 생성될 때까지 저장된 모든 속성에 초기값을 설정해줘야 한다. 저장된 속성의 초기값이 결정되지 않은 상태로 남겨둘 수 없다. 생성자 내에서 stored property의 초기값을..

[HIG] 공식문서 씹어먹기: App Architecture - Launching

Launching launch 될 때의 경험은 사람들이 당신의 앱에 대한 느낌에 대하여 중대한 영향을 준다. 사람들이 사용하는 장치 혹은 당신의 앱이 마지막으로 실행된 때에서 얼마나 지났는지와 관계없이 launch 경험은 빠르고 끊임없다. launch 화면을 제공하세요! 시스템은 lauch 화면을 앱이 시작되는 순간에 보여준 후에 빠르게 앱의 첫번째 화면으로 전환시킨다. launch 화면의 기능은 초기 컨텐츠가 로드될 때 사람들에게 앱이 빠르고 responsive 하다는 인상을 주기 위함이다. lauch 화면과 끊임없는 전환을 보장하기위해 앱의 첫화면과 유사하지 않고 주의를 끌지 않는 단순한 화면을 디자인 해야한다. 적절한 방향으로 launch 하세요! App이 가로 및 세로 모드를 모두 지원하면 장치의..

[HIG] 공식문서 씹어먹기: iOS Interface Essentials

Overview 대부분의 iOS App은 UIKit 을 통해 만들 수 있다. UIKit 은 Programming framework로 공통적인 interface element를 선언한다. 이 framework는 높은 수준의 사용자화를 제공하는 동안에도 앱이 시스템 간에 지속성 있는 모습을 보여주도록 한다. UIKit 요소는 flexible 하고 familiar 하다. UIKit 요소는 adaptable 하며 어떠한 iOS 장비에서도 훌륭하게 보이는 iOS 앱을 만들 수 있도록 도와준다. system의 appearance가 변화하면 자동으로 반영된다. UI Kit이 제공하는 대표적인 Interface element는 다음과 같이 3가지 주요 카테고리로 나눠볼 수 있다. Bars 사람들에게 app 내부에서 어..

Lecture 9 Review Part 2: EmojiArt Drag and Drop Multithreading

EmojiArt MVVM fileprivate enum with associated values Drag and Drop Model 새로운 EmojiArt 프로젝트를 생성한 후에 EmojiArtModel 모델을 생성한다. 일반적으로 모델에 Model이라는 이름을 함께 사용하지 않는다. 이번의 경우 지난 분기 수업에 있어서 앱의 이름과 동일한 구조체가 있을때 Preview가 혼동되는 문제가 있었다. /// UI Independent representation of EmojiArtDocument struct EmojiArtModel { /// Custom type background var background: Background /// Another custom type of array var emojis..

Lecture 9 Review Part 1: EmojiArt Drag and Drop Multithreading

기존에 만들어온 Memorize 데모앱 대신 새로운 EmojiArt 를 만들어 볼 것이다. 앞으로 나올 강의에서는 EmojiArt를 기준으로 수업한다. Collections of Identifiable Memorize 앱에서 다음과 같은 코드를 사용해본 경험이 있을 것이다. func choose(_ card: Card) { if let index = cards.firstIndex(where: { $0.id == card.id }) { cards[index].isFaceUp = true } } 카드 배열에서 선택된 카드를 찾아서 isFaceUp 혹은 isMatch 와 같은 것들을 설정해줘야하기 때문이다. 카드는 구조체이고 구조체는 값 타입이며 값타입은 복사되기 때문에 배열에서 바로 변경해야한다. 위와 같은..

[Computer Vision] Hough Transform

Overview 검출된 엣지를 여러가지 분야에서 활용하는 방법을 배운다. 엣지를 간단하게 표현할 수 있는 방법을 배운다. 엣지를 통해 선분이나 원을 찾는 방법을 배운다. 엣지 연결과 선분 근사 엣지의 표현 방법 위 이미지에는 16 x 8 이미지가 있다. 영상에서 엣지가 차지하는 영역이 적기 때문에 메모리 사용 측면에서 비효율적이다. 메모리를 줄이면서 효율적으로 엣지의 위치를 추적하는 방법들이 있다. 첫번째 방법은 체인코드를 사용하는 것이다. 영상의 화소를 쭉 훑다가 처음 만나는 점을 기준으로 오른쪽 방향을 0 기준으로 잡아서 8연결성으로 살펴본다. 체인코드는 위와 같은 8 연결성에서 어떻게 연결되어 있는지 표현하는 것을 의미한다. 영상에서 엣지 성분들은 다음과 같이 분류해볼 수 있다.@ (끝점) : ed..

반응형