1. OperationQueue
- OperationQueue는 operation을 호출
- operation을 queue에 추가하면 실행될 때까지 queue에 남아있게 됨
- 추가한 operation을 직접 삭제 불가
- 완료되지 않은 작업을 대기열에 중단시키면 queue / operaion이 메모리에 그대로 남아있는 메모리 누수가 발생 할 수 있음
2. OperationQueue
class var main: OperationQueue
class var current: OperationQueue?
- current는 현재 작업을 실행한 OperationQueue 반환 / 대기열 확인 불가시 nil
- main은 메인 스레드에서 발생한 OperationQueue 반환
- 인스턴스 생성 예
let queue = OperationQueue()
let mainQueue = OperationQueue.main
let currentQueue = OperationQueue.current
3. 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에 추가 가능
let someOperation = BlockOperation {
}
let operationQueue = OperationQueue()
operationQueue.addOperation(someOperation)
4. maxConcurrentOperationCount
var maxConcurrentOperationCount: Int
5. cancelAllOperations
- 대기열에 있는 모든 operation의 cancel() 메서드를 호출
6. waitUntilAllOperationsAreFinished
- 현재 스레드를 차단하고 OperationQueue의 모든 operation 실행이 끝날 때까지 기다리는 메서드
- 이 시간 동안 현재 스레드에 queue에 작업을 추가할 수 없지만 다른 스레드는 작업 추가 가능
7. qualityOfService
var qualityOfService: QualityOfService
- OperationQueue에도 qos 설정 가능
8. isSuspended
var isSuspended: Bool { get set }
- 대기열이 Operation 스케줄링이 진행중인지에 대한 상태값
- false 인 경우 : 대기열의 operation 실행
- true 인 경우 : 대기열의 operation을 실행시키지 않지만 현재 실행 중인 operation은 계속 실행
- 중단된 대기열에 operaion 추가는 가능하지만 isSuspended가 false 될때까지 실행되지 않음