본문 바로가기

분류 전체보기

(352)
177. Data Persistence Overview Data Persistence Overview (데이터 영구 저장) iOS에서 지원하는 저장 방식은 다음과 같다. User Default Property List Keychain Core Data Binary Data 설정값등의 간단한 데이터는 User Default와 Property List를 사용한다. 작은 크기의 데이터를 쉽고 빠르게 쓰고, 접근할 수 있다. 단, Query를 지원하지 않기 때문에 데이터의 검색이 쉽지 않다. 암호등의 민감한 정보는 Keychain을 사용한다. 다수의 데이터를 저장할 때는 Core Data를 사용한다. 모든 데이터를 객체로 관리하기 때문에 검색과 정렬이 용이하고, 일부 데이터에만 접근하는 것도 가능하기 때문에 파일 크기가 성능에 큰 영향을 주지 않는다. Binary ..
176. GCD in Action GCD in Action // // ImageFilterViewController.swift // Concurrency Practice // // Created by Martin.Q on 2021/12/23. // import UIKit class ImageFilterViewController: UIViewController { @IBOutlet weak var collectionView: UICollectionView! var isCancelled = false @IBAction func start(_ sender: Any) { PhotoDataSource.shared.reset() collectionView.reloadData() isCancelled = false } @IBAction func ca..
175. Dispatch Group, Dispatch Semaphore Dispatch Group Dispatch Queue는 추가된 작업들을 가사으이 그룹으로 관리한다. 이는 서로 다른 Queue에 추가된 작업을 동일한 그룹으로 관리하는 것도 가능하다. 이름 그대로 여러 작업을 하나로 묶는 개념이다. 따라서 묶인 모든 작업이 완료돼야 그룹이 완료된다. // // DispatchGroupViewController.swift // Concurrency Practice // // Created by Martin.Q on 2021/12/23. // import UIKit class DispatchGroupViewController: UIViewController { let workQueue = DispatchQueue(label: "WorkQueue", attributes: .c..
174. Dispatch Work Item & Dispatch Source Timer Dispatch Work Item GCD에서 Task 를 Capsule화 하는 Class이다. 이를 직접 실행할 수 있지만, 보통은 Queue나 Diaspatch Source에 추가하는 방식으로 사용한다. 취소에 관한 API를 제공하지만 효율적이지는 못하다. 만약 필요하다면 Operation Queue와 Operation을 활용해 사용하는 것이 좋다. // // DispatchWorkItemViewController.swift // Concurrency Practice // // Created by Martin.Q on 2021/12/23. // import UIKit class DispatchWorkItemViewController: UIViewController { let workQueue = Dis..
173. GCD #1 (Grand Central Dispatch) Grand Central Dispatch GCD는 Thread를 자동으로 생성하고, 효율적으로 관리하는 역할을 한다. Thread Pool을 사용하기 때문에 자원을 최대한 적게 사용하면서 빠른 성능을 제공한다. 또한, 직관적이고 단순한 API를 제공한다. GCD는 모든 애플 기기들에서 동일하게 사용할 수 있다. GCD의 핵심 객체는 Dispatch Queue이다. Task를 추가할 때는 Block의 형태로 추가하거나, Dispatch Work Item으로 Capsule화 해서 추가한다. FIFO 방식으로 Task를 관리하고, 환경과 방식에 따라 실행 순서를 제어한다. 이러한 모델을 Work-Queu Programming Model이라고 부르기도 한다. Dispatch Queue는 Task를 실행하는 방식..
172. Interoperation Dependencies Operation간의 의존성 (Interoperation Dependencies) Operation 사이의 의존성은 실행 순서를 결정한다. 의존성을 가지지 않은 Operation은 동시에 실행되고, 의존성을 가진 Operation은 이전 Operation이 완료되거나 취소된 경우 실행된다. 간단히 말하면 이전에 작성한 Complition Handeler를 통해 작동하는 Operation이 해당한다. 이들의 의존성은 단방향이며, 상호 의존은 불가능하고, 복수의 의존성을 가질 수는 있다. 이는 서로 다른 Operation Queue에 존재하더라도 유효하다. Operation Class는 이를 위한 세가지 속성을 제공한다. addDependency() 의존성을 추가할 때 사용한다. removeDependenc..
171. Operation & Operation Queue Operation Operation은 하나의 작업을 나타내는 객체이다. 일반적으로 Operation Class를 상속한 Block Operation을 사용하지만 Operation Class를 SubClassing 하고 Custom Operation을 생성해 사용하기도 한다. Operation의 장점 Operation 사이의 의존성 추가(Interoperation Dependencies) Operation들 사이에 의존성을 추가해 실행 순서를 제어할 수 있다. 실행 취소(Cancellation) Completion Handler API 제공 t Value Observing을 사용해 상태를 감시하고, 우선순위 설정에 필요한 API를 함꼐 제공한다. Operation은 Single-shot Object이다. ..
#03. 타이머 구현과 문제 파악 보호되어 있는 글입니다.
#02. Timer 구현, 이전의 문제 해결 보호되어 있는 글입니다.
#01 Design 보호되어 있는 글입니다.