Core Graphics Quarts(쿼츠)라는 그래픽 라이브러리 안에 들어있는 기술을 활용하여 2D 렌더링, 수행 경로 기반 드로잉, 안티 얼리어싱 렌더링, 그라디언트, 이미지, 색상, PDF 문서 등등의 처리를 해주는 프레임워크다. OverView Core Graphics 프레임워크는 Quartz 고급 드로잉 엔진을 기반으로 합니다. 이것은 타의 추종을 불허하는 출력 충실도로 낮은 수준의 가벼운 2D 렌더링을 제공합니다. 이 프레임워크를 사용하여 경로 기반 그리기, 변환, 색상 관리, 오프스크린 렌더링, 패턴, 그라디언트 및 음영, 이미지 데이터 관리, 이미지 생성, 이미지 마스킹, PDF 문서 생성, 표시 및 구문 분석을 처리합니다. macOS에서 Core Graphics에는 디스플레이 하드웨어, ..
CoreData Device 에 데이터를 저장하거나 CloudKit 을 사용해 여러 Device. 에 데이터를 동기화 할수있게 하는놈이다. OverView 핵심 데이터를 사용하여 오프라인에서 사용할 수 있도록 응용 프로그램의 영구 데이터를 저장하고 임시 데이터를 캐시하며 단일 장치에서 응용 프로그램에 실행 취소 기능을 추가할 수 있습니다. 단일 iCloud 계정의 여러 장치에서 데이터를 동기화하기 위해 Core Data는 자동으로 스키마를 CloudKit 컨테이너에 미러링합니다. 핵심 데이터의 데이터 모델 편집기를 통해 데이터의 유형 및 관계를 정의하고 각 클래스 정의를 생성합니다. 그러면 코어 데이터는 런타임에 개체 인스턴스를 관리하여 다음과 같은 기능을 제공할 수 있습니다. Persistence(저장..
Diffable Datasource DiffableDataSource란? WWDC19 에서 소개된 놈이다. IOS13 부터 사용가능하다! TableView 또는 CollectionView를 그리기 위한 데이터를 관리하고 UI를 업데이트 하는 역할을 한다. Data Source와 달리 데이터가 달라진 부분을 추적하여 자연스럽게 UI를 업데이트한다. 기본적으로, Diffable Data Source와 DataSource의 역할은 같다. 하지만 Diffable Data Sources 를 사용하면 이전과 달라진 부분을 자동으로 알아차리고 새로운 부분만 다시 그리기 때문에 tableView나 collectionView를 단순하게 업데이트가 가능하다. Diffable DataSource를 사용하여 얻게 되는 효과와..
Hash Table과 Hashable HashTable이란? 자료구조중 하나이며 Swift에서는 딕셔너리를 사용해 해시테이블을 사용할수있다! 딕셔너리는 Key-Value로 값을 저장한다. 딕셔너리가 해시 테이블로 구현되어 있기 때문에 해시 테이블도 Key-Value로 값을 저장한다. 해시테이블은 내부적으로 배열로 구현되어 있다. Key-Value 값을 저장함수를 통해 배열에 저장 한다고 보면되겠다. 예시를 보자! 위의 사진처럼 Key-Value 를 HashTable 에 저장하려고 한다! 이때 HashTable 에 저장하려고 할때 순서대로(0, 1...) 저장된다면 해시테이블이아니라 일반 배열이다. 해시테이블은 데이터가 순서를 지키지 않고 저장된다! 예시 사진은 저장하려는 값이 2개밖에없지만...무튼 해시..
IOS Layout Cycle, Drawing Cycle Application에서 UI화면에 어떤것을 보여줄것인지 어떻게 업데이트 되는지 이해하기 위해서는 MainRunLoop, Update cycle 에대해 이해하고 있어야한다. MainRunLoop 어플리케이션이 실행되면 iOS의 UIApplication이 매인 스레드에서 main run loop를 실행시킨다. main run loop는 돌아가면서 터치 이벤트, 위치의 변화, 디바이스의 회전 등의 각종 이벤트들을 처리하게 된다. 이러한 처리 과정은 각 이벤트들에 알맞는 핸들러를 찾아 그들에게 권한을 처리 권한을 위임하며 진행된다. 이렇게 발생한 이벤트들을 모두 처리하고 권한이 다시 main run loop로 돌아오게 되고 이 시점을 update cyc..
궁금증 노티피케이션을 사용할때 옵저버를 해제하지 않고 해당 클래스가 종료되면(view가 pop, dissmis를 의미) 옵저버도 같이 해제되는걸까? 1view, 2view 에서 Notification center 을 사용할때 2view 에서 옵저버를 해지 하지않을경우 2view가 메모리에서 제대로 해지되지않고 좀비처럼 남아있을수 있다. (자동으로 같이 메모리에서 해제될줄 알았다..) 1view, 2view 에서 1view->2view로 modal present 2view->1view 로 dissmis 하게될경우 1view 의 라이프사이클은 어떻게 되는걸까? 네비게이션과 동일하게 1view 는 viewDidLoad 는 처음 한번만 호출되며 그후 dissmis 로 돌아오게 될 경우 1view 의 viewWi..
tag 사용법 코드로 태그를 부여하는것도 가능하며 storyBoard에서도 가능하다. 위와 같이 label 에 tag 를 달아주는것이 가능! 아래 쪽에 Tag 라고 하는 공간이있으며 기본값은 0 이기때문에 0으로 설정되어있는 모습. tag 를 사용하여 label,button 등 UI컴포넌트에 enum 의 원시값 처럼 Int 값을 넣어 사용할수있다. tag에 들어올수있는 값은 Int(1,2,3...)만 가능하다. 활용예시 각각의 버튼을 하나의 @IBAction 메서드에 연결하여 sender 를 이용하여 활용한 모습이다. @IBAction func touchToOrderJuice(_ sender: UIButton) { switch sender { case ddalBaJuiceOrderButton: makeJ..
UserDefaults 설정해둔 데이터가 저장되어있다면 앱을 껏다 켜도 데이터가 사라지지 않고 남아있어 데이터를 활용할수있다. 간단히 말하면 데이터 저장소 라고 할수있다. 전역에 위치하여 어디서든 데이터를 쉽게 읽고 저장할수있다! 객체를 저장할수도 있다. UserDefaults는 사용자 기본 설정과 같은 단일 데이터 값에 적합하다. 대량의 유사한 데이터 를 저장해야하는 경우에는 sqlite 데이터베이스가 더 적합하다. UserDefaults 사용법 UserDefaults 는 [key: Value] 로 데이터를 저장하는데 이때 key 값은 String 이다. UserDefaults 를 이용해 값을 저장할때는 set메서드를 이용한다. UserDefaults 에 값을 저장할때 기존의 key 와 같은 key를 ..