Timer & Runloop
- Timer
- 생성자 이용
- +
- Runloop (Event Processing Loop)
: Theard에서 발생하는 Event source를 감시합니다. Theard를 깨운 다음 Runloop로 event를 전달합니다. +
- 생성자로 timer를 생성 할떄는 Runloop에 추가 한 다음 fire 메소드를 직접 호풀 해야 한다.
- Timer 구현 주의사항
- 타이머가 중복되는 것을 막기위해
-> 이미 생성된 타이머가 있을때 다른 타이머가 생성되는걸 막거나 이전 타이머를 중지시켜야 한다.
-> 화면을 나올때도 중지시켜야 한다.
-> 화면이 전환되서 돌아올때는 새로운 타이머를 시작해야 한다
- 허용오차 설정
- 배터리 절약
Concurrency Programming in iOS
- Operation, GCD 개요
- Main Thread와 Background Thread
- Queue
- 동시성 문제 해결 패턴
- Thread 클래스 활용
Operation & Operation Queue
let queue = OperationQueue.main
let queue = OperationQueue()
- 취소 구현
- 시작되지 않은 작업은 언제든지 취소 할 수 있지만, 실행 중이라면 취소기능이 구현되어 있어야 취소 할 수 있다.
- Operation Queue 사용 패턴
- Operation을 Queue로 관리
- 우선 순위 설정
- queuePrority : 동일한 queue에 들어있는 operation 우선 순위
- .VeryHigh, .high, .normal, .low, .veryLow
(총 5단계, 설정하지 않으면 기본값은 normal)
- Quality of Service(QoS) : 리소스 사용 우선 순위
- .userInteractive, .userInitiated, .utility, .background
(기본값은 .background)
- Completion Block
Interoperation Dependencies
- 의존성 API
- 단방향, 상호 의존 불가능
- API 3가지 add remove dependencies
- "다운로드 op -> 리사이징 op -> 필터 op -> reload op " 작업 사이에 의존성을 추가하는 예제 구현
- Main Queue에 추가된 작업 취소 방법
- 최대 실행 작업 수 설정
GCD - Grand Central Dispatch
- GCD 개요
- Efficient
- Dispatch Work Item
- Work-Queue Programming Model :
- Concurrent Dispatch Queue
- 동시에 실행, 작업수는 알아서
- Serial Dispatch Queue
- 하나씩 실행
- QoS(=Quality of Service)
- 위 내용과 동일
- async와 sync 비교
- 지연 실행 구현
- 병렬 실행 구현