class Operation : NSObject
즉, 작업을 한 번 실행하고 다시 실행하는 데 사용할 수 없습니다.
start()
메서드를 호출하여 작업을 직접 실행할 수 있습니다.준비 상태가 아닌 작업을 시작하면 예외가 트리거되기 때문에 작업을 수동으로 실행하면 코드에 더 많은 부담이 가해집니다.
isReady 속성은 작업의 준비 상태를 보고합니다.특정 순서로 작업을 실행하는 편리한 방법
입니다. addDependency(_:) 및 removeDependency(_:) 메서드를 사용하여 작업에 대한 종속성을 추가 및 제거할 수 있습니다.
NSOperation 클래스는 여러 속성에 대해 KVC(키-값 코딩) 및 KVO(키-값 관찰)를 준수합니다.
필요에 따라 이러한 속성을 관찰하여 애플리케이션의 다른 부분을 제어할 수 있습니다. 속성을 관찰하려면 다음 키 경로를 사용하십시오.
isCancelled - read-only
isAsynchronous - read-only
isExecuting - read-only
isFinished - read-only
isReady - read-only
dependencies - read-only
queuePriority - readable and writable
completionBlock - readable and writable
이러한 속성에 관찰자를 연결할 수는 있지만 Cocoa 바인딩을 사용하여 애플리케이션 사용자 인터페이스의 요소에 바인딩해서는 안 됩니다.
사용자 인터페이스와 관련된 코드는 일반적으로 애플리케이션의 메인 스레드에서만 실행되어야 합니다.
작업은 모든 스레드에서 실행할 수 있으므로 해당 작업과 관련된 KVO 알림은 모든 스레드에서 유사하게 발생할 수 있습니다.
NSOperation 개체에 대한 추가 속성을 정의하는 경우 해당 속성도 KVC 및 KVO와 호환되도록 만드는 것이 좋습니다.
비동기 작업을 정의하려면 작업의 진행 중인 상태를 모니터링하고 KVO 알림을 사용하여 해당 상태의 변경 사항을 보고해야 하기 때문에 더 많은 작업이 필요합니다.
비동기 작업을 정의하는 것은 수동으로 실행된 작업이 호출 스레드를 차단하지 않도록 하려는 경우에 유용합니다.
>**Important**
>**start() 메서드에서 절대로 super를 호출해서는 안 됩니다**
>동시 작업을 정의할 때 작업 시작 및 적절한 KVO 알림 생성을 포함하여 기본 start() 메서드가 제공하는 것과 동일한 동작을 스스로 제공해야 합니다.
>또한 start() 메서드는 작업을 실제로 시작하기 전에 작업 자체가 취소되었는지 확인해야 합니다. 취소 의미에 대한 자세한 내용은 취소 명령에 응답을 참조하십시오.
isReady 키 경로를 통해 클라이언트는 작업을 실행할 준비가 되었음을 알 수 있습니다.
isExecuting 키 경로를 통해 클라이언트는 작업이 할당된 작업에서 활발하게 작동하는지 여부를 알 수 있습니다.
isFinished 키 경로를 통해 클라이언트는 작업이 성공적으로 완료되었거나 취소되어 종료되고 있음을 알 수 있습니다.
isCancelled 키 경로는 클라이언트가 작업 취소가 요청되었음을 알려줍니다.
작업 개체 자체의 cancel() 메서드를 호출하거나 OperationQueue 클래스의 cancelAllOperations() 메서드를 호출하여 이 작업을 수행합니다.
macOS 10.6 이상에서 작업 대기열에 있고 완료되지 않은 종속 작업이 있는 작업에서 cancel() 메서드를 호출하면 해당 종속 작업은 이후에 무시됩니다.
작업이 이미 취소되었기 때문에 이 동작을 사용하면 대기열이 작업의 start() 메서드를 호출하여 main() 메서드를 호출하지 않고 대기열에서 작업을 제거할 수 있습니다.
대기열에 없는 작업에 대해 cancel() 메서드를 호출하면 작업이 즉시 취소된 것으로 표시됩니다.
각 경우에 작업을 준비 또는 완료로 표시하면 적절한 KVO 알림이 생성됩니다.
특히 주 작업 코드는 isCancelled 속성 값을 주기적으로 확인해야 합니다.
사용자 지정 start() 메서드를 구현하는 경우 해당 메서드는 취소에 대한 조기 확인을 포함하고 적절하게 작동해야 합니다.