- DispatchQueue에서 주요한 개념은 sync/async, main/global
- Operation은 좀 더 객체지향적으로 설계되어 sync/async에 대한 정보는 Operation이 가지고 있음
- Thread관리는 OperationQueue가 하는 식으로 역할 분리
- OperationQueue에서는 모든 Operation에 대한 새로운 스레드를 만들어서 작업을 처리
- OperationQueue는 Operation을 호출
- operation을 큐에 추가하면 실핼될 때까지 operation은 큐에 남아있게 되며, 추가한 operation을 직접 삭제할 수는 없음
- 모든 operation이 끝날 때까지 Queue는 유지됨
- 이때 완료되지 않은 작업을 대기열에 중단시키면 Queue와 Operation이 메모리에 그대로 남아있는 → 메모리 누수가(Memory Leak) 발생
OperationQueue 사용하기
✐ main, current
class var main: OperationQueue
class var current: OperationQueue?
- current는 현재 작업을 시작한 OperationQueue를 반환함
- 대기열을 확인할 수 없는 경우에는 nil이 될 수 있기 때문에 Optional Type으로 정의
- main은 메인 스레드에서 동작하는 OperationQueue를 반환함
- 메인 스레드에서 작업해야할 때 사용하는 프로퍼티임
let queue = OperationQueue()
let mainQueue = OperationQueue.main // 메인 스레드에서 동작함
let currentQueue = OperationQueue.current // 현재 작업을 시작한 Queue
✐ addOperation
func addOperation(_ op: Operation)
func addOperations(_ ops: [Operation], waitUntilFinished wait: Bool)
func addOperation(_ block: @escaping () -> Void)
- addOperation은 OperationQueue에 Operation을 추가하는 메서드
- 추가되는 동시에 Operation의 작업이 수행됨
- Operation을 Queue에 넣어 작업을 시작하는 메서드라고 봐도 무방
- 파라미터에 따라 하나의 Operation, 여러 개의 Operation, 클로져 등 다양한 형태로 Queue에 추가할 수 있음