사실 Operation Queue 는 GCD 를 내부적으로 사용하고 있다.
- GCD 는 C API 이다. Operation Queue 는 Obj-C 객체다.
- GCD 큐 안에 있는 작업은 블록이다 (가볍다). Operation 은 Obj-C 객체다 (무겁다).
- 작업 취소
Operation Queue 의 경우, 대기 중인건 취소 가능
GCD의 경우 cancel 기능이 없다. 직접 구현하는 수밖에.. - 의존 작업
반드시 A가 성공적으로 실행된 뒤에 B가 실행되어야 할 때
Operation 은 원하는 만큼 다른 Operation 에 의존할 수 있다. - Operation 프로퍼티의 KVO
Operation 은 isCancelled 나 isFinished 등의 프로퍼티를 갖고 있어서 KVO를 사용하면 GCD보다 세세한 제어가 가능하다. - 작업 우선순위
각 Operation 은 우선순위가 있다. 우선순위가 높은 Operation 이 낮은 것보다 먼저 실행된다.
GCD는 같은 일을 하는 직접적인 방법이 없다. 큐 우선순위 밖에 존재하지 않는다. - 작업의 재사용
직접 Operation Queue 를 상속받아서 하위 클래스를 만들 수 있고, 코드 내에서 재사용할 수도 있다.
- NSNotificationCenter. 선택자를 호출하는 대신 블록으로 알림을 받을 수 있다.
- (id)addObserverForName:(NSString *)name
object:(id)object
queue:(NSOperationQueue *)queue
usingBlock:(void(^)(NSNotification *))block
- 여기서 Operation Queue 말고 Dispatch Queue 를 사용하면 불필요한 GCD에 대한 의존성이 생긴다.