OperationQueue Summary
이 포스트는 edwith의 iOS 프로그래밍을 공부하고 정리한 내용입니다
edwith iOS 프로그래밍 - OperationQueue
Operation Queue
-
연산(Operation)의 실행을 관리하고 대기열의 동작을 관리
-
Operation은 Task(작업)와 관련된 코드와 데이터를 나타내는 추상 클래스
-
Operation Queue는 연산(Operation)의 실행을 관리
-
대기열(Queue)에 추가한 동작은 직접 제거할 수 없다
-
연산(Operation)은 작업이 끝날 때까지 대기열에 남아 았다
-
연산(Operation)을 대기열에서 제거하는 방법은 연산(Operation)을 취소하는 방법뿐이다
-
취소하는 방법은 연산 객체(Operation Object)의 cancel() 메서드를 호출하거나 Operation Queue의 cancelAllOperations() 메서드를 호출하여 대기열에 있는 모든 연산(Operation)을 취소하는 방법이 있다
-
실행 중인 연산(Operation)의 경우 연산 객체(Operation Object)의 취소 상태를 확인하고 실행 중인 연산(Operation)을 중지하고 완료 상태로 변경된다.
-
Operation Object (연산 객체)
- 연산 객체(Operation Object)는 애플리케이션에서 수행하려는 연산(Operation)을 캡슐화하는 데 사용하는 Foundation 프레임워크의 Operation 클래스 인스턴스이다
OperationQueue의 주요 메서드/프로퍼티
특정 Operation Queues 가져오기
- current : 현재 작업을 시작한 Operation Queue를 반환한다
class var current: OperationQueue?{get}
- main : 메인 스레드와 연결된 Operation Queue를 반환한다
class var main: OperationQueue{get}
대기열(Queue)에서 동작(Operation) 관리
- addOperation(_:) : 연산 객체(Operation Object)를 대기열(Queue)에 추가한다
func addOperation(_ op: Operation)
- addOperations(_:waitUntillFinished:) : 연산 객체(Operation Object) 배열을 대기열(Queue)에 추가한다
func addOperations(_ ops: [Operation], waitUntilFinished wait: Bool)
- addOperation(_:) : 전달한 클로저를 연산 객체(Operation Object)에 감싸서 대기열(Queue)에 추가
func addOperation(_ block: @escaping () -> Void)
- cancelAllOperations() : 대기 중이거나 실행 중인 모든 연산(Operation)을 취소
func cancelAllOperations()
- waitUntilAllOperationsAreFinished() : 대기중인 모든 연산(Operation)과 실행 중인 연산(Operation)이 모두 완료될 때 까지 현재 스레드로 접근을 차단한다
func waitUntilAllOperationsAreFinished()
연산(Operation) 실행 관리
- maxConcurrentOperationCount : 동시에 실행할 수 있는 연산(Operation)의 최대 수
var maxConcurrentOperationCount: Int {get set}
- qualityOfService : 대기열 작업을 효율적으로 수행할 수 잇도록 여러 우선순위 옵션을 제공한다
var qualityOfService: QualityOfService {get set}
연산(Operation) 중단
-
isSuspended : 대기열(Queue)의 연산(Operation) 여부를 나타내기 위한 Bool 값.
-
Bool 값이 false인 경우 : 대기열(Queue)에 있는 연산(Operation)을 실행
-
Bool 값이 true인 경우 : 대기열(Queue)에 대기 중인 연산(Operation)을 실행하진 않지만 이미 실행 중인 연산(Operation)은 계속 실행된다
-
var isSuspended: Bool {get set}
대기열(Queue)의 구성
- name: Operation Queue의 이름
var name: String? {get set}