Swift: Operation - OperationQueue

Wooyo·2023년 10월 30일
0
post-thumbnail

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 {
    // some code
}

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 될때까지 실행되지 않음
profile
Wooyo의 개발 블로그

0개의 댓글